≣ 목차
파이썬의 매직 메서드는 클래스에 특별한 기능을 부여해주는 강력한 도구입니다. 흔히 '듀nder 메서드'라고도 불리는 매직 메서드는 __init__처럼 이름 앞뒤에 두 개의 언더스코어(__)가 붙어 있습니다. 매직 메서드를 잘 활용하면 객체의 동작을 커스터마이징하고, 보다 파이썬스러운 코드를 작성할 수 있습니다. 이번 글에서는 파이썬의 주요 매직 메서드와 그 활용법을 알아보겠습니다.
♛ 공지
본 포스팅의 무단도용 및 배포를 금지합니다.
1. 매직 메서드란?
매직 메서드는 파이썬의 클래스 내부에서 특별한 역할을 수행하는 메서드입니다. 예를 들어, 객체를 생성할 때 호출되는 __init__, 문자열로 객체를 표현할 때 호출되는 __str__, 두 객체를 더할 때 호출되는 __add__ 등이 있습니다. 이러한 메서드는 파이썬의 여러 내장 기능과 상호작용하여 사용자 정의 객체도 내장 자료형처럼 동작할 수 있도록 해줍니다.
2. 객체 초기화: __init__
__init__ 메서드는 객체가 생성될 때 호출되는 초기화 메서드입니다. 객체의 속성을 설정하거나 초기 상태를 정의하는 데 사용됩니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person("Alice", 30)
print(person.name) # Alice
print(person.age) # 30
위 예제에서는 __init__ 메서드를 사용하여 Person 객체를 초기화하고, 이름과 나이를 설정했습니다.
3. 객체 표현: __str__ 및 __repr__
__str__ 메서드는 print() 함수로 객체를 출력할 때 호출됩니다. __repr__ 메서드는 객체의 공식적인 문자열 표현을 반환하며, 주로 디버깅 용도로 사용됩니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}, {self.age} years old"
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
person = Person("Alice", 30)
print(person) # Alice, 30 years old
print(repr(person)) # Person(name='Alice', age=30)
__str__은 사용자 친화적인 정보를 제공하며, __repr__은 개발자 친화적인 정보를 제공합니다.
4. 산술 연산자 오버로딩: __add__, __sub__, __mul__ 등
매직 메서드를 사용하면 사용자 정의 객체에 대해 산술 연산자를 오버로딩할 수 있습니다. 예를 들어, 두 객체를 더하거나 빼는 연산을 정의할 수 있습니다.
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __sub__(self, other):
return Vector(self.x - other.x, self.y - other.y)
def __str__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(2, 3)
v2 = Vector(5, 7)
print(v1 + v2) # Vector(7, 10)
print(v1 - v2) # Vector(-3, -4)
__add__와 __sub__ 메서드를 정의하여 +와 - 연산자를 오버로딩했습니다.
5. 비교 연산자 오버로딩: __eq__, __lt__, __le__ 등
객체 간의 비교를 위해 매직 메서드를 사용할 수 있습니다. __eq__는 두 객체가 같은지 비교하고, __lt__는 객체 간의 크기를 비교합니다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.age == other.age
def __lt__(self, other):
return self.age < other.age
p1 = Person("Alice", 30)
p2 = Person("Bob", 25)
print(p1 == p2) # False
print(p1 < p2) # False
위 예제에서는 __eq__와 __lt__ 메서드를 사용하여 두 객체의 나이를 비교했습니다.
6. 컨테이너 타입 구현: __getitem__, __setitem__, __len__
매직 메서드를 사용하여 사용자 정의 객체를 리스트처럼 동작하게 만들 수 있습니다. 예를 들어, 인덱스로 접근하거나 길이를 구할 수 있습니다.
class CustomList:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data[index]
def __setitem__(self, index, value):
self.data[index] = value
def __len__(self):
return len(self.data)
cl = CustomList([1, 2, 3, 4])
print(cl[1]) # 2
cl[1] = 10
print(cl[1]) # 10
print(len(cl)) # 4
__getitem__, __setitem__, __len__ 메서드를 정의하여 리스트와 유사하게 동작하도록 만들었습니다.
7. 매직 메서드의 활용
매직 메서드는 객체의 커스터마이징을 가능하게 하여, 파이썬의 내장 함수나 연산자와 자연스럽게 상호작용할 수 있게 합니다. 이를 통해 사용자 정의 객체도 내장 자료형처럼 직관적으로 사용할 수 있습니다. 매직 메서드를 잘 활용하면 코드를 보다 읽기 쉽고, 유지 보수하기 좋게 만들 수 있습니다.
매직 메서드는 파이썬 클래스의 강력한 기능 중 하나로, 객체의 동작을 세밀하게 제어하고 내장 자료형처럼 사용하도록 도와줍니다. 이 글에서는 __init__, __str__, __add__ 등 여러 매직 메서드의 예를 살펴보았습니다. 매직 메서드를 잘 활용하면 파이썬 코드의 가독성을 높이고 직관적인 객체 동작을 구현할 수 있습니다.
이 글이 매직 메서드의 이해와 활용에 도움이 되었길 바랍니다. 추가로 궁금한 점이나 다른 파이썬 주제에 대한 설명이 필요하다면 언제든지 문의해주세요!
'프로그래밍 > 파이썬(Python)' 카테고리의 다른 글
파이썬(Python) 함수, 모듈, 패키지: 완벽히 이해하기 (2) | 2024.10.15 |
---|---|
파이썬(Python) 클래스: 완벽 가이드 (+코드) (3) | 2024.10.15 |
파이썬(Python) Slicing: 완벽 가이드 (+코드) (2) | 2024.10.15 |
파이썬(Python) 버전 확인: 상황별 주요 모든 방법 (+코드) (2) | 2024.10.15 |
파이썬(Python) 속도 최적화: 주요 모든 전략 (+코드) (2) | 2024.10.15 |