파이썬 연산자 오버로딩이란?
파이썬에서 모든 클래스는 내장 클래스든 사용자가 직접 정의한 클래스든 object 클래스를 상속받습니다. 그런데 이 object 클래스에는 이름 앞뒤에 이중 언더스코어(__)가 붙은 특수한 속성들이 여럿 존재합니다.
각 속성은 동일한 이름을 가진 메서드를 감싸는 래퍼(wrapper) 역할을 하며, 이러한 메서드들을 특별 메서드(special method) 또는 매직 메서드(magic method)라고 부릅니다.
비교 연산자를 위한 매직 메서드
매직 메서드를 클래스 안에서 재정의(오버라이드)하면 해당 연산자의 동작 방식을 바꿀 수 있습니다. 대표적인 비교 연산자 관련 매직 메서드는 다음과 같습니다.
__lt__()→<(작다) 연산자 오버로딩__gt__()→>(크다) 연산자 오버로딩__eq__()→==(같다) 연산자 오버로딩__ne__()→!=(같지 않다) 연산자 오버로딩
간단한 예제 코드
책(Book) 객체를 페이지 수 기준으로 비교하는 예제를 살펴보겠습니다.
class Book:
def __init__(self, title, pages):
self.title = title
self.pages = pages
def __lt__(self, other):
return self.pages < other.pages
def __gt__(self, other):
return self.pages > other.pages
def __eq__(self, other):
return self.pages == other.pages
b1 = Book("파이썬 기초", 300)
b2 = Book("파이썬 심화", 450)
print(b1 < b2) # True
print(b1 > b2) # False
print(b1 == b2) # False이처럼 매직 메서드만 적절히 오버라이드하면, 사용자가 정의한 객체에도 파이썬 내장 타입처럼 자연스럽게 연산자를 적용할 수 있습니다. 이것이 바로 파이썬 연산자 오버로딩의 핵심 원리입니다.