두 가지 다른 "클래스 decorator"
헷갈리는 용어 — "클래스 decorator" 가 (a) 클래스로 *구현* 된 decorator 또는 (b) 클래스에 *적용* 된 decorator 일 수 있음. 여기선 (a) 얘기. (b) 는 "마침 클래스에 적용된 decorator" — 다른 decorator 와 같은 룰.
왜 함수 대신 클래스
함수 기반 decorator 는 closure 변수에 state 저장. 클래스 기반은 속성에 (self.count, self.config). state 가 충분히 복잡해서 다루는 메서드 (reset, stats 등) 가 필요하면 클래스. 단순 wrapper 는 함수 OK.
__call__ 이 인스턴스를 호출 가능하게
클래스에 __call__ 정의하면 인스턴스가 함수처럼 동작. my_instance(args) 가 my_instance.__call__(args) 호출. 클래스-as-decorator 는 nested 함수 대신 __call__ 안에서 wrapper 일을 함.
모양 — __init__ 이 함수 받고, __call__ 이 일 함
클래스의 __init__ 이 wrapped 함수 저장. __call__ 이 *args, **kwargs 받고 wrapper 로직 + 저장된 함수 호출. 필요하면 다른 메서드 (reset, stats) 추가.
원칙: 함수 기반 decorator 가 디폴트 — 다음이 필요하면 클래스 — decorator 객체에 메서드 여러 개, 구조 있는 복잡한 내부 state, decorator 간 상속/합성. 함수 형태가 어색할 때만 클래스.