파이썬 기초문법/파이썬_코딩테스트

파이썬의 숨은 보석, Context Manager로 코드 깔끔하게 작성하기

Family in August 2024. 5. 12. 10:56
반응형


파이썬의 숨은 보석, Context Manager로 코드 깔끔하게 작성하기


파이썬의 Context Manager는 "with" 문과 함께 사용되는 유용한 기능입니다. 이를 적절히 활용하면 자원 열기/닫기, 락 획득/해제, 트랜잭션 시작/롤백 등의 작업을 안전하고 깔끔하게 처리할 수 있습니다.

Context Manager 사용 예시

with open('file.txt') as f:
    contents = f.read()
    # 파일 읽기 코드
# with 블록을 벗어나면 자동으로 파일이 close됩니다.



위 예시처럼 파일을 열고 닫는 단순한 작업조차도 예외 상황을 고려하면 상당히 복잡해집니다. Context Manager를 사용하면 짧은 구문으로 안전하게 처리할 수 있습니다.


직접 Context Manager 구현하기

Context Manager는 __enter__, __exit__ 메서드를 구현해 직접 만들 수 있습니다.

class CustomContext:
    def __init__(self, name):
        self.name = name
        
    def __enter__(self):
        print(f"{self.name} 시작")
        # 리소스 열기 등의 코드
        return self
        
    def __exit__(self, exc_type, exc_val, exc_tb):
        print(f"{self.name} 종료")
        # 리소스 닫기 등의 코드
        
with CustomContext("작업흐름"):
    print("작업 중...")



__enter__에서는 컨텍스트 실행 전 준비 작업을, __exit__에서는 컨텍스트 종료 후 정리 작업을 수행합니다. 예외 발생 시 __exit__의 매개변수로 예외 정보가 전달됩니다.


contextlib 모듈 활용하기

매번 __enter__, __exit__을 구현하기 번거로우면 contextlib 모듈의 contextmanager 데코레이터를 사용할 수 있습니다.

from contextlib import contextmanager

@contextmanager
def custom_context(name):
    print(f"{name} 시작")
    yield  
    print(f"{name} 종료")
    
with custom_context("작업흐름"):
    print("작업 중...")



파이썬의 Context Manager는 try/finally 문을 직접 작성하지 않고 자원 관리 코드를 깔끔하게 작성할 수 있게 해줍니다. 상황에 맞게 적절히 활용하면 가독성 있고 예외 안전한 코드를 구현할 수 있습니다.

반응형