10분
모든 함수에 로깅을 넣으라고요?
반복되는 로깅 코드가 지겨워 - 데코레이터
모든 함수에 로깅을 넣으라고요?
Python 고급: 제너레이터, 데코레이터, 컨텍스트 매니저, Type Hints > 반복되는 로깅 코드가 지겨워 - 데코레이터
학습 목표
코드 중복의 문제점을 체감한다 데코레이터의 필요성을 이해한다
모든 함수에 로깅을 넣으라고요?
"김신입, 이번 스프린트에서 모든 API 함수에 로깅 추가해줘."
신입의 첫 번째 시도:
에디터 로딩 중...
문제점
| 문제 | 심각도 |
|---|---|
| 코드 중복 | 같은 로깅 코드가 50군데 |
| 유지보수 | 로깅 형식 바꾸려면 50군데 수정 |
| 실수 가능성 | 복붙하다 빠뜨리기 쉬움 |
| 핵심 로직 가독성 | 로깅 코드에 비즈니스 로직이 묻힘 |
박선배의 조언
"신입아, 그렇게 하는 게 아니야. 데코레이터 써."
에디터 로딩 중...
데코레이터의 마법
- 함수 위에 @붙이기만 하면 로깅 자동 추가!
- 비즈니스 로직은 깔끔하게 유지
- 로깅 로직은 한 곳에서 관리
오늘의 학습 목표
- First-class function - 함수를 변수처럼 다루기
- Closure - 내부 함수가 외부 변수를 기억
- 기본 데코레이터 - @timing, @log 구현
- 인자 있는 데코레이터 - @retry(max_attempts=3)
- 클래스 데코레이터 - 상태를 유지하는 데코레이터
핵심 포인트
- • 데코레이터 = 함수를 수정하지 않고 기능 추가
- • 코드 중복 제거, 관심사 분리
- • @decorator 문법으로 깔끔하게 적용