연산자 오버로딩(Operator Overloading)이란?
파이썬에서 + 연산자는 숫자를 더할 때도 사용하고, 문자열을 이어 붙일 때도 사용할 수 있습니다. 이것이 가능한 이유는 int 클래스와 str 클래스가 각각 + 연산자를 오버로딩(overloading)하고 있기 때문입니다.
사실 파이썬의 연산자는 각 클래스 내부에 정의된 메서드(method)입니다. 따라서 사용자가 직접 클래스에 연산자에 해당하는 메서드를 정의하는 것을 연산자 오버로딩이라고 부릅니다. 예를 들어, 사용자가 만든 커스텀 객체에서 + 연산자를 사용하려면 __add__ 메서드를 정의하면 됩니다.
예제 코드
다음 코드는 연산자 오버로딩이 실제로 어떻게 작동하는지 쉽게 보여줍니다. 두 개의 원(Circle) 객체를 + 연산자로 더하면 반지름이 합쳐진 새로운 원이 생성됩니다.
import math
class Circle:
def __init__(self, radius):
self.__radius = radius
def setRadius(self, radius):
self.__radius = radius
def getRadius(self):
return self.__radius
def area(self):
return math.pi * self.__radius ** 2
# + 연산자를 오버로딩하는 메서드
def __add__(self, another_circle):
return Circle(self.__radius + another_circle.__radius)
c1 = Circle(3)
print(c1.getRadius())
c2 = Circle(6)
print(c2.getRadius())
# __add__ 메서드를 정의했기 때문에 + 연산자 사용 가능
c3 = c1 + c2
print(c3.getRadius())실행 결과
3 6 9
반지름 3인 원과 반지름 6인 원을 더했더니, 반지름 9인 새로운 원 객체가 생성된 것을 확인할 수 있습니다. 이는 __add__ 메서드를 통해 + 연산자의 동작을 재정의했기 때문입니다.
주요 특수 메서드(Special Methods)
연산자의 기본 동작을 사용자 정의 타입에 맞게 변경하는 것이 바로 연산자 오버로딩입니다. 파이썬의 모든 연산자에는 __add__처럼 대응되는 특수 메서드(매직 메서드 또는 던더 메서드라고도 불림)가 존재합니다.
- __add__ : + (덧셈)
- __sub__ : - (뺄셈)
- __mul__ : * (곱셈)
- __truediv__ : / (나눗셈)
- __lt__, __gt__ : <, > (비교 연산)
- __str__ : print() 호출 시 출력 형식 지정
특수 메서드에 대한 더 자세한 내용은 파이썬 공식 문서(docs.python.org)를 참고하시기 바랍니다.