📌 파이썬 데코레이터 완벽 정리 - 함수에 기능을 덧붙이는 마법
1. ✅ 데코레이터란?
**데코레이터(Decorator)**는 함수나 클래스에 추가 기능을 부여하는 Python의 문법적 도구입니다.
함수 위에 @데코레이터이름을 붙이는 방식으로 사용하며, 원래 함수의 코드를 수정하지 않고도 동작을 바꿀 수 있습니다.
@decorator
def my_function():
...
이 코드는 사실 다음과 같은 의미입니다:
def my_function():
...
my_function = decorator(my_function)
➡ 즉, my_function을 데코레이터 함수에 전달하여 기능을 추가하는 구조입니다.
2. 🧩 기본 구조 이해하기
def decorator(func):
def wrapper(*args, **kwargs):
print("함수 실행 전")
result = func(*args, **kwargs)
print("함수 실행 후")
return result
return wrapper
@decorator
def say_hello():
print("Hello!")
say_hello()
📌 실행 결과:
함수 실행 전
Hello!
함수 실행 후
➡ say_hello() 함수에 전후 기능이 "덧붙여진 것"입니다.
3. 🚀 실전 예시: Django에서 자주 쓰는 데코레이터
데코레이터 이름 기능 설명
@login_required | 로그인한 사용자만 접근 허용 |
@require_GET | GET 요청만 허용 |
@require_POST | POST 요청만 허용 |
@csrf_exempt | CSRF 보안 체크 해제 |
@staff_member_required | 스태프 권한만 허용 |
예시:
from django.contrib.auth.decorators import login_required
@login_required
def my_page(request):
...
➡ 로그인하지 않은 사용자는 자동으로 /accounts/login/으로 리디렉션됩니다.
4. 🧠 커스텀 데코레이터 만들기
def check_admin(func):
def wrapper(request, *args, **kwargs):
if not request.user.is_superuser:
return HttpResponse("접근 권한 없음")
return func(request, *args, **kwargs)
return wrapper
@check_admin
def admin_view(request):
...
5. 🔍 정리 요약
항목 내용
개념 | 기존 함수에 추가 기능을 더하는 구조 |
문법 | @데코레이터이름으로 함수 위에 붙임 |
활용 | 인증, 권한 제한, 로깅, 전후 처리 등 |
장점 | 코드 수정 없이 기능 확장 가능 |
💡 보너스: 데코레이터 체이닝도 가능!
@log
@login_required
def update_profile(request):
...
위처럼 여러 데코레이터를 겹쳐 쓸 수도 있습니다.
'기술블로그' 카테고리의 다른 글
📌 파이썬 키워드 인자 (Keyword Arguments) 완전 정복 (0) | 2025.05.07 |
---|---|
📌 Django form.save(commit=False) 완전 정복 (0) | 2025.05.07 |
✅ Django 모델에서 ForeignKey(User, ...) 에서 'User'는 인자일까? 매개변수일까? (0) | 2025.05.07 |
✅ Django 서버 실행 시 "That port is already in use" 에러 해결법 (포트 점유 강제 종료) (0) | 2025.05.06 |
✅ 왜 로그인은 자동인데, 회원가입은 우리가 직접 만들어야 할까? (0) | 2025.05.06 |