FRONTMANFRONTMAN
  • 태그
  • 방명록
  • 글쓰기
  • 관리자
  • HOME
  • 태그
  • 방명록
Python 이터레이터와 제너레이터
hahekaku
Python 이터레이터와 제너레이터Language/Python2023. 10. 27. 17:38@hahekaku
Table of Contents

이터레이터(iterator)와 제너레이터(generator)는 파이썬에서 반복(iteration)을 구현하고 데이터를 효율적으로 처리하는 중요한 개념입니다. 이 글에서는 이 두 가지를 비교하고 구체적인 예제를 통해 설명합니다.

이터레이터(iterator)란?

이터레이터는 데이터를 하나씩 순서대로 처리할 수 있는 객체입니다. 파이썬에서 이터레이터 객체는 __iter__()와 __next__() 메서드를 구현해야 합니다.

이터레이터의 특징

  1. 데이터를 순서대로 하나씩 반환.
  2. __next__() 메서드 호출 시 다음 값을 반환하며, 더 이상 값이 없으면 StopIteration 예외 발생.
  3. 한 번 사용한 데이터는 다시 접근할 수 없음.

이터레이터 구현 예제

다음은 간단한 이터레이터를 구현하는 코드입니다.

class Counter:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self  # 이터레이터 객체를 반환

    def __next__(self):
        if self.current <= self.end:
            number = self.current
            self.current += 1
            return number
        else:
            raise StopIteration  # 반복이 끝났음을 알림

# 이터레이터 사용
counter = Counter(1, 5)
for num in counter:
    print(num)  # 1, 2, 3, 4, 5 출력

제너레이터(generator)란?

제너레이터는 이터레이터를 더 쉽게 만들 수 있도록 도와주는 함수입니다. 함수 안에서 yield 키워드를 사용해 값을 생성하며, 호출될 때마다 실행이 멈춘 지점부터 재개됩니다.

제너레이터의 특징

  1. 함수 기반으로 동작하며 yield로 값을 생성.
  2. 상태를 유지하며, 필요한 시점에 값 생성.
  3. 메모리 효율적(값을 한 번에 생성하지 않고 필요할 때만 생성).

제너레이터 구현 예제

아래는 앞서 작성한 Counter를 제너레이터로 구현한 예제입니다.

def counter(start, end):
    current = start
    while current <= end:
        yield current
        current += 1

# 제너레이터 사용
for num in counter(1, 5):
    print(num)  # 1, 2, 3, 4, 5 출력

이터레이터와 제너레이터의 차이점

특징 이터레이터 제너레이터
구현 복잡도 클래스와 메서드를 모두 구현해야 함 함수와 yield만 사용해 간단히 구현 가능
메모리 사용 모든 데이터를 미리 메모리에 올림 필요할 때만 데이터를 생성해 메모리 효율적
상태 관리 명시적으로 상태를 관리해야 함 자동으로 상태가 관리됨

제너레이터 응용: 무한 시퀀스

제너레이터는 무한 반복 시퀀스와 같은 메모리 효율적인 작업에 적합합니다.

def infinite_sequence():
    number = 0
    while True:
        yield number
        number += 1

# 무한 시퀀스 사용
for num in infinite_sequence():
    if num > 10:  # 10까지만 출력하고 중단
        break
    print(num)  # 0, 1, 2, ..., 10 출력

언제 이터레이터와 제너레이터를 사용할까?

  1. 이터레이터
    • 복잡한 상태 관리가 필요한 경우.
    • 클래스 설계가 유용한 경우.
  2. 제너레이터
    • 데이터 처리가 많아 메모리 효율성이 중요한 경우.
    • 단순한 시퀀스를 생성할 때.

 

'Language > Python' 카테고리의 다른 글

Python context manager (with의 동작 원리)  (0) 2023.10.29
Python 데코레이터 (Decorators)  (0) 2023.10.28
Python 예외 처리(Exception, try-except)  (0) 2023.10.26
Python 모듈(module)과 패키지(package)  (0) 2023.10.25
Python 객체지향 프로그래밍 (OOP)  (0) 2023.10.24
Language/Python 추천 글
more
  • Python context manager (with의 동작 원리)
    Python context manager (with의 동작 원리)2023.10.29
  • Python 데코레이터 (Decorators)
    Python 데코레이터 (Decorators)2023.10.28
  • Python 예외 처리(Exception, try-except)
    Python 예외 처리(Exception, try-except)2023.10.26
  • Python 모듈(module)과 패키지(package)
    Python 모듈(module)과 패키지(package)2023.10.25
FRONTMAN

검색

250x250

방문자 수

Total
Today
Yesterday

카테고리

  • 분류 전체보기 (54)
    • Language (48)
      • JavaScript (15)
      • TypeScript (14)
      • Python (14)
      • Dart (5)
      • Java (0)
    • FE (6)
      • WEB (4)
      • React (0)
      • Flutter (1)
    • CS (0)
      • Algorithm (0)
      • Network (0)
    • DevOps (0)

공지사항

  • 전체보기

최근 글

인기 글

태그

  • Import
  • js
  • DART
  • 파이썬
  • export
  • typeScript
  • 타입
  • await
  • Object
  • tuple
  • Flutter
  • Modules
  • CLASS
  • function
  • Type
  • 자바스크립트
  • nodejs
  • frontend
  • Python
  • JavaScript
  • 타입스크립트
  • 웹
  • web
  • npm
  • Interface
  • async
  • inline frame
  • list
  • 리스트
  • OOP

최근 댓글

FRONTMAN :: hahekaku
CopyrightBluemivDesigned byBluemiv

티스토리툴바