설정, 함수, 호출 인자를 차례로 받는다
@retry(times=3)은 먼저 설정을 받는 팩토리를 호출하고, 그 결과가 함수를 받는 데코레이터가 되며, 마지막 래퍼가 실제 호출 인자를 받아. 세 단계는 각각 서로 다른 수명과 책임을 가져.
설정은 클로저에 남는다
팩토리 호출마다 별도 클로저가 만들어지므로 서로 다른 제한과 상태를 가진 데코레이터를 독립적으로 쓸 수 있어. 괄호를 빼면 팩토리에 설정 대신 함수 자체가 들어가 계약이 달라져.
원칙: 바깥에서 안으로 “설정 → 꾸밀 함수 → 호출 값” 순서로 읽으면 세 겹이 헷갈리지 않아.