파이썬(Python)은 객체지향 언어로서, 클래스 내부에 특수 메서드(매직 메서드, 던더 메서드)를 정의하면 연산자나 내장 함수의 기본 동작을 재정의할 수 있습니다. 이를 기본 오버로딩(Default Overloading)이라고 부르며, 이를 잘 활용하면 사용자 정의 클래스를 마치 리스트나 문자열 같은 내장 타입처럼 자연스럽게 다룰 수 있습니다.
재정의 가능한 주요 메서드 목록
아래 표는 사용자 정의 클래스에서 오버로딩할 수 있는 대표적인 일반 기능들을 정리한 것입니다.
| 번호 | 메서드 · 설명 · 호출 예시 |
|---|---|
| 1 | __init__( self [,args...] ) 생성자(Constructor) — 객체 생성 시 초기화를 담당하며, 선택적 인자를 받을 수 있습니다. 호출 예시 : obj = className(args) |
| 2 | __del__( self ) 소멸자(Destructor) — 객체가 삭제될 때 호출됩니다. 호출 예시 : del obj |
| 3 | __repr__( self ) 평가 가능한(evaluable) 문자열 표현 — 디버깅 및 개발자용 공식 표현에 사용됩니다. 호출 예시 : repr(obj) |
| 4 | __str__( self ) 출력 가능한(printable) 문자열 표현 — print() 함수 등 사용자에게 보여질 형태를 정의합니다. 호출 예시 : str(obj) |
| 5 | __cmp__( self, x ) 객체 비교 — 두 객체의 크기를 비교합니다. 호출 예시 : cmp(obj, x) |
메서드별 상세 설명
1. __init__ : 생성자
객체가 생성되는 순간 자동으로 호출되어 인스턴스 변수를 초기화하는 역할을 합니다. 파이썬 클래스에서 가장 기본적이고 필수적인 오버로딩 메서드입니다.
2. __del__ : 소멸자
객체가 더 이상 참조되지 않아 메모리에서 제거될 때 호출됩니다. 파일 핸들 닫기 등 정리 작업에 활용할 수 있지만, 실행 시점이 명확하지 않으므로 신중하게 사용해야 합니다.
3. __repr__ vs __str__ : 문자열 표현
__repr__은 개발자를 위한 공식적이고 평가 가능한 표현을, __str__은 최종 사용자를 위한 읽기 쉬운 출력 형식을 담당합니다. 두 메서드가 모두 정의되어 있으면 print()는 __str__을 우선적으로 사용합니다.
4. __cmp__ : 객체 비교 (참고 사항)
__cmp__는 파이썬 2에서 두 객체를 한 번에 비교하던 메서드입니다. 다만 파이썬 3부터는 제거되었으며, 대신 __lt__(<), __le__(<=), __eq__(==), __ne__(!=), __gt__(>), __ge__(>=)와 같은 풍부한 비교 메서드(Rich Comparison Methods)를 개별적으로 구현해야 합니다.
마무리
이처럼 파이썬의 오버로딩 메서드를 적절히 활용하면 클래스의 동작을 유연하게 확장하고, 코드의 가독성과 직관성을 크게 높일 수 있습니다. 실제 프로젝트에서는 __init__, __str__, __repr__부터 먼저 익히는 것을 추천합니다.