Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬(Python)에서 연산자 오버로딩은 어떻게 작동할까?

연산자 오버로딩(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)를 참고하시기 바랍니다.