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

파이썬 연산자 오버로딩 완벽 가이드: __add__ 메서드로 벡터 덧셈 구현하기

파이썬으로 2차원 벡터를 표현하는 Vector 클래스를 만들었다고 가정해 봅시다. 그런데 이 객체 두 개를 더하기 연산자(+)로 더하면 어떻게 될까요? 별도의 처리 없이는 파이썬은 TypeError를 발생시키며 오류를 냅니다.

하지만 클래스 안에 __add__ 메서드를 직접 정의하면 이야기가 달라집니다. 이 메서드는 덧셈 연산자가 사용될 때 자동으로 호출되며, 여기에 벡터 덧셈 로직을 구현해 두면 + 연산자가 우리가 기대하는 대로 동작합니다.

연산자 오버로딩이란?

연산자 오버로딩(Operator Overloading)은 이미 존재하는 연산자(+, -, *, == 등)에 사용자가 정의한 클래스에 맞는 새로운 의미를 부여하는 기능입니다. 파이썬에서는 __add__, __sub__, __mul__ 같은 특수 메서드(매직 메서드)를 통해 구현할 수 있습니다.

예제 코드

#!/usr/bin/python
class Vector:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __str__(self):
        return 'Vector (%d, %d)' % (self.a, self.b)
    def __add__(self, other):
        return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2, 10)
v2 = Vector(5, -2)
print(v1 + v2)

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Vector(7,8)

코드 설명

  • __init__: 객체 생성 시 벡터의 두 성분(a, b)을 초기화합니다.
  • __str__: print() 함수로 객체를 출력할 때 표시될 문자열 형식을 정의합니다.
  • __add__: v1 + v2처럼 덧셈 연산자가 사용되면 호출되며, 각 성분끼리 더한 새로운 Vector 객체를 반환합니다.

이처럼 연산자 오버로딩을 활용하면 사용자 정의 객체에도 내장 타입처럼 직관적인 연산을 적용할 수 있어 코드의 가독성과 표현력이 크게 향상됩니다. 참고로 뺄셈은 __sub__, 곱셈은 __mul__, 동등 비교는 __eq__ 메서드를 오버로딩하여 마찬가지 방식으로 구현할 수 있습니다.