본문 바로가기
카테고리 없음

Python 상급자 학습 가이드

by fisherman1 2025. 5. 22.

개요 : 이 글은 Python에 능숙한 상급 개발자를 위한 고급 기능 학습 콘텐츠입니다. 제너레이터, 데코레이터, 컨텍스트 매니저, 병렬 처리, 모듈 최적화를 중심으로 설명하며, 모든 기능은 실무에서 활용할 수 있는 강력한 도구입니다.

1. 제너레이터 (Generator)

yield 키워드를 사용해 함수의 상태를 유지하며 값을 순차적으로 반환합니다. 메모리 효율적인 반복 처리를 위해 자주 사용됩니다.

개념 예시 코드
제너레이터 함수 정의
def count_up_to(max):
    count = 1
    while count <= max:
        yield count
        count += 1

for num in count_up_to(5):
    print(num)
        

2. 데코레이터 (Decorator)

기존 함수를 변경하지 않고 기능을 확장할 수 있게 해주는 문법입니다. 로깅, 캐싱, 권한 체크 등에 활용됩니다.

개념 예시 코드
함수에 데코레이터 적용
def log(func):
    def wrapper(*args, **kwargs):
        print("함수 실행 전 로그")
        return func(*args, **kwargs)
    return wrapper

@log
def greet(name):
    print(f"안녕하세요, {name}님!")

greet("철수")
        

3. 컨텍스트 매니저 (Context Manager)

with 구문을 통해 리소스를 안전하게 관리할 수 있습니다. 파일, DB 커넥션, 락(lock) 등에 사용되며, __enter__ / __exit__ 메서드가 핵심입니다.

개념 예시 코드
사용자 정의 컨텍스트 매니저
class FileLogger:
    def __enter__(self):
        self.file = open("log.txt", "w")
        return self.file

    def __exit__(self, exc_type, exc_value, traceback):
        self.file.close()

with FileLogger() as f:
    f.write("로그 기록 시작\n")
        

4. 병렬 처리 (Multiprocessing & Threading)

Python의 GIL(Global Interpreter Lock) 제약을 회피하기 위해 multiprocessing 또는 threading 모듈을 사용합니다. CPU 작업은 프로세싱, I/O 작업은 스레드가 유리합니다.

개념 예시 코드
multiprocessing 예제
from multiprocessing import Process

def task(name):
    print(f"{name} 작업 실행 중")

if __name__ == '__main__':
    p1 = Process(target=task, args=("프로세스1",))
    p2 = Process(target=task, args=("프로세스2",))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
        

5. 성능 최적화와 모듈화

상급자는 코드 실행 속도와 메모리 효율을 고려한 프로파일링, 캐싱, 함수형 프로그래밍 기법 등을 사용할 수 있어야 합니다.

개념 예시 코드
LRU 캐싱을 활용한 성능 향상
from functools import lru_cache

@lru_cache(maxsize=1000)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

print(fib(30))
        

요약 정리

주제 핵심 내용
제너레이터 yield, lazy evaluation
데코레이터 함수 기능 확장, 중첩 함수
컨텍스트 매니저 리소스 안전 처리, with문 사용
병렬 처리 multiprocessing vs threading
성능 최적화 lru_cache, 프로파일링, 함수형 패턴