[파이썬] 루프와 제너레이터

Python은 루프와 제너레이터를 활용하여 반복 작업을 효율적으로 처리할 수 있는 강력한 기능을 제공합니다. 루프는 특정 작업을 반복 실행하는 데 사용되고, 제너레이터는 데이터 스트림을 생성하는 함수입니다. 이번 글에서는 파이썬에서 루프와 제너레이터를 어떻게 활용하는지 알아보겠습니다.

루프 (Loop)

루프는 특정 작업을 반복해서 실행하는 제어 구조입니다. 파이썬에서는 forwhile 루프를 제공합니다. 이 루프를 사용하면 리스트, 튜플, 배열 등과 같은 자료구조에서 항목을 하나씩 가져와 처리할 수 있습니다. 하나씩 항목을 가져오는 과정은 반복자(iterable)를 통해 가능하며, for 루프를 사용하여 반복자에서 값을 가져올 수 있습니다.

fruits = ['apple', 'banana', 'orange']

for fruit in fruits:
    print(fruit)

위의 코드에서는 fruits라는 리스트의 항목들을 하나씩 가져와 fruit 변수에 할당하고 출력하는 작업이 반복됩니다. 즉, 리스트의 각 항목에 대해 동일한 작업을 반복 수행하는 것입니다. 이와 같은 루프를 통해 반복 작업을 간편하게 처리할 수 있습니다.

제너레이터 (Generator)

제너레이터는 데이터 스트림을 생성하는 함수입니다. 제너레이터는 yield 키워드를 사용하여 값을 생성하고 호출자에게 반환합니다. 이를 통해 큰 데이터 집합을 메모리에 한번에 로드하지 않고, 필요한 만큼 즉시 사용할 수 있으므로 효율적인 메모리 관리가 가능합니다.

def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b

fib = fibonacci()

for _ in range(10):
    print(next(fib))

위의 코드에서는 피보나치 수열을 생성하는 제너레이터 함수를 정의하고, next() 함수로 값을 하나씩 가져와 출력하는 작업이 반복됩니다. 이와 같은 제너레이터를 사용하면 필요한 만큼의 데이터를 언제든지 생성할 수 있으므로 메모리 사용을 최적화할 수 있습니다.

참고: 제너레이터는 함수 안에 yield 문을 포함하고, 이 함수를 호출하여 제너레이터 객체를 생성합니다. yield 문을 만나면 제너레이터는 현재 상태를 보존하고 값을 반환한 후, 다음 호출에서는 바로 이곳부터 실행됩니다.

결론

파이썬의 루프와 제너레이터 기능을 적절히 활용하면 반복 작업을 간결하게 처리할 수 있으며, 메모리 사용을 최적화할 수 있습니다. 루프를 사용하여 자료구조의 항목을 반복 처리하고, 제너레이터를 사용하여 대량의 데이터를 효율적으로 생성하는 방법에 대해 알아보았습니다. 이러한 파이썬의 강력한 기능들은 개발자들에게 편의성과 성능 면에서 큰 이점을 제공해줍니다.