Python 학습: 고급 주제
Python은 강력한 고급 기능을 제공하여 더 복잡하고 효율적인 프로그램을 작성할 수 있도록 합니다. 이번 글에서는 데코레이터, 제너레이터, 컨텍스트 매니저에 대해 알아보겠습니다.
1. 데코레이터: 함수 데코레이터와 클래스 데코레이터
데코레이터는 함수를 수정하거나 확장하는데 사용되는 디자인 패턴입니다. 함수와 클래스에 데코레이터를 적용하여 코드의 재사용성을 높이고, 기능을 확장할 수 있습니다.
- 함수 데코레이터 : 함수 데코레이터는 다른 함수를 인자로 받아서 새로운 함수를 반환하는 함수입니다.
함수 데코레이터 예제
def wrapper():
print("함수 호출 전")
func()
print("함수 호출 후")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
위의 예제에서 my_decorator는 say_hello 함수를 감싸서 호출 전후에 메시지를 출력합니다. @my_decorator 구문을 사용하여 say_hello 함수에 데코레이터를 적용합니다.
- 클래스 데코레이터 : 클래스 데코레이터는 클래스의 정의를 수정하는 데 사용됩니다.
클래스 데코레이터 예제
def new_method(self):
return "새로운 메서드 추가됨"
cls.new_method = new_method
return cls
@add_methods
class MyClass:
def __init__(self, name):
self.name = name
obj = MyClass("Test")
print(obj.new_method())
위의 예제에서 add_methods 데코레이터는 클래스에 새로운 메서드를 추가합니다. @add_methods 구문을 사용하여 MyClass 클래스에 데코레이터를 적용합니다.
2. 제너레이터: yield, 제너레이터 함수
제너레이터는 이터레이터를 생성하는 함수로, yield 키워드를 사용하여 값을 하나씩 반환합니다. 제너레이터는 메모리 효율성이 뛰어나며, 큰 데이터셋을 처리할 때 유용합니다.
제너레이터 함수 예제
yield 1
yield 2
yield 3
gen = my_generator()
for value in gen:
print(value)
위의 예제에서 my_generator 함수는 yield 키워드를 사용하여 값을 하나씩 반환합니다. for 루프를 사용하여 제너레이터에서 값을 반복해서 얻을 수 있습니다.
- 제너레이터와 메모리 효율 : 제너레이터는 큰 데이터를 처리할 때 메모리 효율성을 높여줍니다. 예를 들어, 제너레이터를 사용하여 큰 범위의 숫자를 생성할 수 있습니다.
제너레이터와 메모리 효율 예제
for i in range(n):
yield i
gen = large_range(1000000)
print(next(gen)) # 0 출력
print(next(gen)) # 1 출력
print(next(gen)) # 2 출력
위의 예제에서 large_range 제너레이터는 큰 범위의 숫자를 메모리 효율적으로 생성합니다. next 함수를 사용하여 제너레이터에서 값을 하나씩 가져올 수 있습니다.
3. 컨텍스트 매니저: with 구문, __enter__, __exit__
컨텍스트 매니저는 리소스를 관리하는 데 사용되는 구조입니다. with 구문을 사용하여 컨텍스트 매니저를 구현할 수 있으며, __enter__와 __exit__ 메서드를 정의합니다.
컨텍스트 매니저 예제
def __enter__(self):
print("컨텍스트 진입")
return self
def __exit__(self, exc_type, exc_value, traceback):
print("컨텍스트 종료")
with MyContextManager() as manager:
print("컨텍스트 내부 코드 실행")
위의 예제에서 MyContextManager 클래스는 __enter__와 __exit__ 메서드를 정의하여 컨텍스트 매니저를 구현합니다. with 구문을 사용하여 컨텍스트 매니저를 사용할 수 있습니다.
파일 처리 예제 : 컨텍스트 매니저는 파일 처리와 같은 리소스 관리에 매우 유용합니다.
file.write("Hello, World!")
위의 예제에서 with 구문을 사용하여 파일을 열고, 파일 작업이 끝난 후 자동으로 파일을 닫습니다.
이 글에서는 Python의 고급 주제인 데코레이터, 제너레이터, 컨텍스트 매니저에 대해 알아보았습니다. 이러한 고급 기능을 이해하고 활용하면 더 효율적이고 구조적인 코드를 작성할 수 있습니다. Happy Coding!
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 12. Python의 "웹 개발" (0) | 2024.06.18 |
---|---|
[Python] 11. Python의 "데이터베이스" (0) | 2024.06.18 |
[Python] 9. Python의 "표준 라이브러리와 외부 패키지" (0) | 2024.06.18 |
[Python] 8. Python의 "모듈과 패키지" (0) | 2024.06.18 |
[Python] 7. Python의 "객체 지향 프로그래밍 (OOP)" (0) | 2024.06.18 |