데코레이터(Decorator) @
데코레이터는 다른 함수(또는 메서드) 를 수정하거나 확장하는 데 사용되는 함수
기존 코드를 변경하지 않고, 추가적인 기능을 쉽게 부여할 수 있게 해줌
작동방식
- 데코레이터는 또 다른 함수를 매개변수로 받아들이고, 새로운 함수를 반환합니다.
- @ 기호를 사용하여 데코레이터를 함수나 클래스에 적용할 수 있습니다.
# 기본 데코레이터 정의
def my_decorator(func):
def wrapper(*args, **kwargs):
print("함수 호출 전")
result = func(*args, **kwargs)
print("함수 호출 후")
return result
return wrapper
# 데코레이터 적용
@my_decorator
def say_hello():
print("안녕하세요!")
# 함수 호출
say_hello()
# 출력
함수 호출 전
안녕하세요!
함수 호출 후
데코레이터 체이닝
- 여러 데코레이터를 하나의 함수에 적용 가능
- 안쪽에서부터 밖으로 차례대로 적용
@decorator1
@decorator2
def my_function():
pass
- decorator2 적용후 -> decorator1 적용
컨텍스트 매니저 ( with )
컨텍스트 매니저는 리소스를 획득하고 사용한 뒤, 자동으로 정리해주는 메커니즘
특정 블록이 시작되고 끝날 때 자동으로 실행되는 코드를 정의
기본구조
with 컨텍스트매니저 as 변수:
# 작업 수행
작동 방식
- __enter__ 메서드 : with 블록에 들어가기 전에 실행됩니다
- __exit__ 메서드 : with 블록을 벗어날 때 실행됩니다.
with open('example.txt', 'w') as file:
file.write('Hello, World!')
# 파일이 자동으로 닫힘
만약 with 문을 사용하지 않을경우 아래코드와 같은 의미
file = open('example.txt', 'w')
try:
file.write('Hello, World!')
finally:
file.close()
사용자 정의 컨텍스트 매니저
class MyContextManager:
def __enter__(self):
print("컨텍스트 진입")
return "리소스"
def __exit__(self, exc_type, exc_value, traceback):
print("컨텍스트 종료")
return False # 예외를 무시하지 않음
with MyContextManager() as resource:
print(resource) # 출력: "리소스"
'Python > Python 기초' 카테고리의 다른 글
[Python] 함수 심화 - 고차함수 (6) | 2024.12.10 |
---|---|
[Python] 이터레이터( Iterator ), 제너레이터( Generator ) (0) | 2024.12.02 |
[Python] 파일 다루기 (0) | 2024.12.01 |
[Python] 클래스 ( class ) (7) | 2024.12.01 |
[Python] 예외 처리 ( try, except, finally ), 에러 타입 (1) | 2024.12.01 |