- 람다, map, filter, reduce
이터레이터와 이터러블 이해하기
파이썬에서는 for 루프나 컴프리헨션에서 자주 사용하는 이터레이터(iterator)와 이터러블(iterable)의 개념이 중요합니다. 이터러블이란 순회가 가능한 객체를 뜻하며, 예를 들어 문자열, 리스트, 튜플, 딕셔너리, 집합, range 타입 등이 모두 해당됩니다. 이들 객체는 순차적으로 데이터를 하나씩 꺼낼 수 있는 특징을 지니고, 내부적으로 iter() 함수를 적용했을 때 이터레이터가 생성됩니다. 이터레이터는 next() 함수로 다음 값을 반환하며, 더 이상 반환할 값이 없을 때 StopIteration 예외를 발생시킵니다. 이렇게 파이썬의 반복 구문은 이터러블과 이터레이터 프로토콜에 기반하여 유연하게 동작합니다.
제너레이터의 구현과 활용
제너레이터(generator)는 이터레이터를 손쉽게 만들 수 있는 함수형 도구입니다. 일반 함수처럼 보이지만, return 대신 yield를 사용하여 계산 중간중간 값을 하나씩 내보냅니다. 호출될 때마다 마지막 실행 지점 이후부터 다시 작동하여, 메모리를 아끼면서도 무한대의 데이터 시퀀스를 순차적으로 생성할 수 있습니다. 예를 들어, 피보나치 수열이나 대용량 로그 파일의 각 줄을 제너레이터로 처리하면 전체 데이터를 한 번에 메모리에 올려둘 필요가 없어집니다. next()로 값을 꺼내는 방식은 이터레이터와 동일합니다.
제너레이터 표현식
리스트 컴프리헨션이 새로운 리스트를 만들듯, 제너레이터 표현식(generator expression)은 대괄호 대신 소괄호를 사용해 값을 하나씩 생산하는 제너레이터를 만듭니다. (x * x for x in range(10))처럼, 코드 한 줄로 간결하게 무한 반복이나 대용량 데이터 처리에 적합한 제너레이터를 생성할 수 있습니다. 실제로 sum, any, all 등 여러 내장 함수와 함께 활용하면 코드가 짧아지고, 효율적인 반복이 가능해집니다.
코루틴과 비동기 프로그래밍 입문
파이썬 3.5부터 도입된 async/await 문법은 복잡한 동시성 프로그래밍을 이해하는 데 필수입니다. 코루틴(coroutine)은 일종의 일시정지 가능한 함수로, await 키워드와 함께 비동기 처리를 지원합니다. 단일 쓰레드에서 여러 작업을 동시에 처리하는 것처럼 보이게 하므로, 네트워크 통신, 파일 입출력 등 대기 시간이 큰 작업에서 특히 큰 성능 이점을 얻습니다. asyncio 라이브러리와 함께 코루틴을 사용하면, 이벤트 루프 위에서 수많은 작업을 효율적으로 스케줄링할 수 있습니다. 동기식 코드에 비해 코드 구조가 복잡해질 수 있으나, 파이썬의 현대적 프로그래밍 환경에서는 반드시 익혀야 할 요소입니다.
이터레이터, 제너레이터, 코루틴은 파이썬의 반복과 동시성의 근간을 이루는 중급 개념입니다. 데이터를 효과적으로 처리하고, 비동기적인 환경에서도 가독성 높고 견고한 코드를 작성하려면 이들 도구에 대한 이해가 필수적입니다. 흐름에 따라 적재적소에 활용하며, 파이썬 본연의 생산성을 최대치로 끌어내보세요.