반응형
파이썬 중급 과정의 첫걸음은 파이썬의 **데이터 모델(Data Model)**을 이해하는 것입니다. 파이썬의 모든 것은 객체이며, 이 객체들이 파이썬 엔진과 상호작용하는 핵심 규칙이 바로 **매직 메서드(Magic Methods)**입니다. 이름 앞뒤에 언더바 두 개가 붙어 있어 '던더(Dunder) 메서드'라고도 불리는 이 기능들을 통해 '파이썬다운(Pythonic)' 코드를 작성하는 법을 배워봅시다.
1. ✨ 매직 메서드(Magic Methods)란?
매직 메서드는 우리가 직접 호출하지 않아도 파이썬 인터프리터가 특정 상황에서 자동으로 호출해 주는 특수 메서드입니다. 예를 들어, 리스트의 길이를 구하기 위해 len(my_list)를 실행하면 내부적으로는 my_list.__len__()이 호출됩니다.
주요 매직 메서드 예시:
- __init__: 객체 초기화(생성자) 시 호출됩니다.
- __str__: print() 함수나 str() 호출 시 사용자에게 보여줄 문자열을 정의합니다.
- __repr__: 개발자용 문자열 표현으로, 객체 생성 과정을 추적하거나 디버깅할 때 유용합니다.
- __len__: len() 함수 호출 시 객체의 길이를 반환합니다.
2. 🛠️ 실전 코드: 클래스에 파이썬 마법 입히기
간단한 '벡터(Vector)' 클래스를 통해 매직 메서드가 어떻게 작동하는지 확인해 보겠습니다.
Python
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
# 객체를 출력할 때 예쁘게 보여주기
def __str__(self):
return f"Vector({self.x}, {self.y})"
# 더하기 연산자(+) 정의
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
# 객체의 절댓값(크기) 정의
def __abs__(self):
import math
return math.hypot(self.x, self.y)
v1 = Vector(3, 4)
v2 = Vector(1, 2)
print(v1) # Vector(3, 4) -> __str__ 호출
print(v1 + v2) # Vector(4, 6) -> __add__ 호출
print(abs(v1)) # 5.0 -> __abs__ 호출
3. 📦 효율적인 데이터 구조: NamedTuple & Dataclass
데이터만 담는 단순한 클래스를 만들 때, 매직 메서드를 일일이 정의하는 것은 번거롭습니다. 파이썬은 이를 위한 세련된 도구들을 제공합니다.
- NamedTuple: 튜플의 성질(불변성)을 가지면서 인덱스가 아닌 '이름'으로 접근할 수 있습니다. 메모리 효율이 매우 좋습니다.
- Dataclass (Python 3.7+): @dataclass 데코레이터 하나로 __init__, __repr__, __eq__ 등을 자동으로 생성해 줍니다.
Python
from dataclasses import dataclass
@dataclass
class User:
id: int
name: str
email: str
user1 = User(1, "Gemini", "gemini@example.com")
print(user1) # User(id=1, name='Gemini', email='gemini@example.com') 자동 생성!
💡 시니어의 조언: 왜 매직 메서드를 공부해야 하나요?
매직 메서드를 이해하면 "파이썬의 표준 라이브러리와 내가 만든 객체가 자연스럽게 어우러지게" 만들 수 있습니다. 내가 만든 클래스가 len()을 지원하고, + 연산이 가능하며, for 루프에서 돌아가게 만드는 것—이것이 바로 자바스크립트나 C++과는 다른 '파이썬다운 설계'의 시작입니다.
반응형
'개발 > Python' 카테고리의 다른 글
| [중급반] Step 3. 객체 지향 프로그래밍(OOP) 심화: 상속과 MRO (0) | 2025.12.26 |
|---|---|
| [중급반] Step 2. 일급 함수와 클로저: 함수를 데이터처럼 다루기 (0) | 2025.12.26 |
| [초급반] Step 10. 파이썬 응용 시작: 데이터 분석 라이브러리 맛보기 (0) | 2025.12.16 |
| [초급반] Step 9. 모듈과 패키지: 외부 라이브러리 사용하기 (0) | 2025.12.16 |
| [초급반] Step 8. 파일 입출력 (File I/O): 텍스트 파일 읽고 쓰기 (0) | 2025.12.16 |