Logo
내 게시판 만들기
파이썬

데코레이터 기초 — @ 문법

멍뭉이 | 2026.04.27 06:20:11
조회 14 | 추천 0

데코레이터(decorator)는 「함수나 클래스를 감싸 새 동작을 추가하는」 파이썬의 강력한 패턴입니다.

@ 기호로 표현되며, 「함수의 동작을 바꾸지 않고 외피만 더한다」는 발상에서 나왔습니다.



가장 간단한 데코레이터.

def my_decorator(func): def wrapper(): print("전"); func(); print("후"); return wrapper.

@my_decorator; def hello(): print("안녕").

hello() — 「전 / 안녕 / 후」 순서로 출력.

hello = my_decorator(hello)와 같은 의미입니다.



데코레이터 패턴은 「관심사 분리」에 매우 강합니다.

함수의 본업과 「로깅·시간 측정·인증·캐싱」 같은 부수적 관심사를 분리할 수 있습니다.

본업 함수는 본업만 적고, 부수적 관심사는 데코레이터로 자동 추가합니다.



친숙한 예시들.

@lru_cache — 캐싱.

@property — 게터.

@classmethod, @staticmethod — 메서드 종류.

@app.route("/") — Flask 라우팅.

@login_required — 인증 검사.

파이썬과 그 라이브러리들은 데코레이터로 풍부한 표현력을 만들어 냅니다.



데코레이터의 단점은 「디버깅이 다소 어렵다」는 점입니다.

함수를 감싸므로 스택 트레이스가 복잡해질 수 있고, 함수의 docstring·이름이 wrapper로 바뀌어 버리는 부작용이 있습니다.

이를 피하려면 functools.wraps를 사용해야 합니다(다음 글에서 다룹니다).




한 줄 요약


데코레이터는 함수·클래스를 감싸 새 동작을 추가하는 패턴입니다.

@ 기호로 표현되며, 로깅·캐싱·인증 같은 부수 관심사를 본업과 분리하는 데 강력합니다.




더 알아볼 것


- functools.wraps — 데코레이터의 함수 정보 보존

- 인자가 있는 데코레이터

- 클래스로 만드는 데코레이터

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
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 15 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
신고하기

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