매직 메서드(magic method)
1. 매직 메서드
파이썬의 클래스에는 기본적으로 내장하고 있는 특별 메서드들이 있습니다. 파이썬에서는 이런 내장하고 있는 특별 메서드들을 쉽게 재정의하여 사용할 수 있게 되어있습니다.
마치 마법처럼 간단하게 수정할 수 있다고 해서 매직 매서드라고 부릅니다. 혹은 더블 언더바(__)를 2개 쓰고 있는 점에서 던더(dunder) 메서드라고도 부릅니다.
좌표평면의 점을 class로 구현해보았습니다.
매직 메서드 __init__
은 앞에서도 살펴보았습니다. 이 매직 메서드는 인스턴스가 생성이 될 때 호출됩니다. 위 코드에서는 dot1과 dot2 인스턴스가 생성이 될 때 호출됩니다. 여기서 매개변수, 아규먼트로 들어간 10과 20, 20과 30은 각각 self.x에 등록됩니다.
클래스를 정의한 블록 내에서 존재하는 클래스 속성과 메서드는 클래스 네임 스페이스에 등록이 됩니다. 인스턴스 속성은 __init__
메서드 내에서 self.이름
을 주고 할당이 되는 경우에만 인스턴스 네임 스페이스에 등록이 됩니다.
쉽게 말해 위 코드 10과 20, 20과 30은 각각 고유의 인스턴스 네임 스페이스에 등록이 되어 있습니다. 위 예제에서 클래스 변수는 없습니다.
또한, 매직 메서드 중 __add__
메서드를 추가하였습니다. 이는 +
부호를 사용하여 덧셈을 할 때 일어날 일을 적을 수 있습니다. 다른 Point의 인스턴스가 들어오면 x좌표는 x좌표끼리, y좌표는 y좌표끼리 더하게 해두었고, 정수나 실수가 들어오면 그 수만큼 둘 다 증가하도록 해두었습니다.
마찬가지로 곱하기도 구현할 수 있습니다. 곱하기는 __mul__
로 구현할 수 있습니다. 다만 실제 곱하기를 구현하지는 않았습니다. 이는 실제 곱하기를 구현하지 않아도 된다는 것을 보여드리기 위함입니다.
위와 같은 예시를 통해 행렬의 덧셈, 뺄셈, 곱셈 등을 구현할 수도 있습니다.
연산에 관련된 매직 메서드 공식 문서는 아래와 같습니다. 이러한 매직 메서드의 종류는 너무도 많기 때문에 필요에 따라 찾아보며 코딩합니다. 주요한 메서드는 아래 챕터에서 정리하도록 하겠습니다.
Data model (매직 메서드)2. 주요한 매직 메서드
모든 메직 메서드를 알 필요는 없습니다. 메직 메서드를 통해 우리가 그동안 다양한 자료형에서 사용했던 연산자들이 어떻게 작동하는지 확인해보는 시간을 가져보도록 하겠습니다.
__init__(self, ...)
: 객체가 생성될 때 호출되는 생성자 메서드__str__(self)
:str()
함수 출력 결과와 같습니다. 이는 print로 출력되는 결과와도 동일합니다. 이 출력은 "공식적이지 않은" 또는 "좋게 보이는" 문자열 표현을 반환합니다. 객체의 공식적인 표현은 repr입니다.__add__(self, other)
: 덧셈 연산__sub__(self, other)
: 뺄셈 연산__mul__(self, other)
: 곱셈 연산__truediv__(self, other)
: 나눗셈 연산(/)__eq__(self, other)
: 동등 연산 (==)__ne__(self, other)
: 부등 연산 (!=)__lt__(self, other)
: "작다" 연산 (<)__le__(self, other)
: "작거나 같다" 연산 (<=)__gt__(self, other)
: "크다" 연산 (>)__ge__(self, other)
: "크거나 같다" 연산 (>=)