[Python] Generator란 무엇이고 어떻게 사용하나요?

장현웅·2023년 11월 19일

Generator는 이터레이터이자 이터러블을 생성하는 함수로, 함수 호출자에게 함수 실행의 제어권을 양도할 수 있는 특징을 가지고 있습니다. 함수 호출자는 함수의 실행 중간에 원하는 부분에서 yield 키워드를 사용하여 함수 실행 일시 중지하여 값을 반환받을 수 있고 다시 yield키워드를 사용하여 일시 중지된 지점부터 함수를 다시 시작할 수 있습니다.

Generator의 이점은 특히 반복문을 사용할 때 확실히 느낄 수 있는데,

일반적인 배열을 사용한 반복문의 경우, 배열은 모든 값을 메모리에 저장하고 있어 메모리 소비가 크기 때문에 특히 큰 데이터셋의 경우 메모리 부족이 발생할 수 있습니다. Generator는 필요한 시점에 값을 생성하므로 전체 데이터를 한 번에 메모리에 저장하지 않기 때문에 메모리 사용이 효율적입니다. 성능 측에서도 배열은 모든 값들이 한 번에 메모리에 로드되어 모든 연산이 즉시 수행되지만, Generator는 큰 데이터셋이나 무한한 시퀀스(연속된 값의 나열)와 같은 경우에도 모든 값을 한 번에 연산하지 않고 일시 중지와 다시 시작 기능으로 필요한 만큼만 값을 뽑아낼 수 있기 때문에 성능을 높일 수 있습니다.

Generator는 일반적으로 한 번에 값을 계산하고 생성하는 것이 아니라, 필요에 따라 값을 생성하는 데 목적이 있기 때문에 주로 순차적인 접근에 적합합니다. 특히 연산이 필요한 값만 계산할 수 있어서 코드가 더 간결하고 가독성이 좋아집니다. 하지만 특정 위치로 무작위로 이동하는 무작위 접근이 필요한 경우에는 적합하지 않을 수 있습니다. 예를 들어, 리스트나 배열과 같은 자료구조는 인덱스를 사용하여 무작위 접근이 가능하지만, Generator는 이런 방식의 무작위 접근을 지원하지 않습니다.

2개의 댓글

comment-user-thumbnail
2023년 11월 20일

Generator가 무엇인지 잘 정리해 주셨네요👍

답글 달기
comment-user-thumbnail
2023년 11월 20일

Generator가 무엇인지 잘 정리해 주셨네요👍

답글 달기