Logo
내 게시판 만들기
파이썬

클래스 데코레이터

부엉이 | 2026.04.27 06:20:12
조회 16 | 추천 0

데코레이터는 함수뿐 아니라 클래스에도 적용할 수 있습니다.

「클래스를 받아 변형된 클래스를 반환」하는 함수가 클래스 데코레이터입니다.

클래스 정의를 자동으로 보강하는 데 유용합니다.



기본 사용.

def add_repr(cls): def __repr__(self): return f"{cls.__name__}({self.__dict__})"; cls.__repr__ = __repr__; return cls.

@add_repr; class Person: def __init__(self, name): self.name = name.

p = Person("홍"); print(p) — "Person({'name': '홍'})".

클래스에 __repr__을 자동 추가한 셈입니다.



친숙한 예시들.

@dataclass — 가장 유명한 클래스 데코레이터.

__init__·__repr__·__eq__를 자동 생성.

@total_ordering(functools) — __lt__와 __eq__만 정의하면 나머지 비교 메서드 자동 생성.

@app.route(...)도 사실 클래스 데코레이터의 변형으로 자주 쓰입니다.



클래스 데코레이터의 매력은 「반복적인 보일러플레이트를 자동화」할 수 있다는 점입니다.

100개의 클래스에 같은 패턴을 적용해야 한다면, 한 데코레이터로 100번 적용하는 게 깔끔합니다.



더 강력한 변형으로 「메타클래스(metaclass)」가 있습니다.

클래스 자체의 생성을 통제하는 더 깊은 메커니즘이지만, 메타클래스는 매우 복잡해 일반 개발에서는 거의 안 씁니다.

대부분의 「클래스 자동 변형」은 클래스 데코레이터로 충분히 표현되며, 「메타클래스가 필요한 사람은 이미 자기가 그것이 필요하다는 것을 안다」는 농담이 있을 정도입니다.




한 줄 요약


클래스 데코레이터는 클래스를 받아 변형된 클래스를 반환합니다.

@dataclass·@total_ordering이 친숙한 예이며, 반복적 보일러플레이트 자동화에 강합니다.




더 알아볼 것


- 메타클래스와의 비교

- __init_subclass__ — 더 가벼운 대안

- 주의: 데코레이터의 부작용

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
71 햇살이 26/04/27 10 0
70 곰돌이 26/04/27 12 0
69 구름이 26/04/27 14 0
68 부엉이 26/04/27 12 0
67 야옹이 26/04/27 12 0
66 야옹이 26/04/27 14 0
65 멍뭉이 26/04/27 31 0
64 멍뭉이 26/04/27 13 0
63 부엉이 26/04/27 16 0
62 구름이 26/04/27 11 0
61 멍뭉이 26/04/27 14 0
60 야옹이 26/04/27 13 0
59 토순이 26/04/27 14 0
58 다람쥐 26/04/27 14 0
57 햇살이 26/04/27 19 0
56 멍뭉이 26/04/27 9 0
55 구름이 26/04/27 9 0
54 다람쥐 26/04/27 12 0
53 곰돌이 26/04/27 11 0
52 햇살이 26/04/27 36 0
51 멍뭉이 26/04/27 10 0
50 곰돌이 26/04/27 37 0
49 다람쥐 26/04/27 12 0
48 너구리 26/04/27 12 0
47 구름이 26/04/27 15 0
46 야옹이 26/04/27 12 0
45 너구리 26/04/27 12 0
44 야옹이 26/04/27 12 0
43 곰돌이 26/04/27 13 0
42 구름이 26/04/27 10 0
신고하기

신고 사유를 선택해 주세요.