작심삼일

8주차-2. Iterator 본문

스터디/디자인 패턴

8주차-2. Iterator

yun_s 2021. 7. 8. 21:39
728x90
반응형

디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다.

틀린 부분은 알려주시면 감사하겠습니다.

어떤 패턴인가

내부 표현부를 노출하지 않고 어떤 집합 객체에 속한 원소들을 순차적으로 접근할 수 있는 방법을 제공합니다.


어떻게 쓰는가

Iterator: 원소를 접근하고 순회하는 데 필요한 인터페이스를 제공합니다.

ConcreteIterator: Iterator에 정의된 인터페이스를 구현하는 클래스로, 순회 과정 중 집합 객체 내에서 현재 위치를 기억하빈다.

Aggregate: Iterator 객체를 생성하는 인터페이스를 정의합니다.

ConcreteAggregate: 해당하는 ConcreteIterator의 인스턴스를 반환하는 Iterator 생성 인터페이스를 구현합니다.

class dataloader():
    def __init__(self, data):
        self.data = data
        self.cur = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        self.cur += 1
        return self.data[self.cur]

어디서 활용되는가

이는 책의 내용 (p. 342)을 그대로 가져왔다.

1. 객체 내부 표현 방식을 모르고도 집합 객체의 각 원소들에 접근하고 싶을 때

2. 집합 객체를 순회하는 다양한 방법을 지원하고 싶을 때

3. 서로 다른 집합 객체 구조에 대해서도 동일한 방법으로 순회하고 싶을 때


My Opinion

Python에서 너무 많이 사용되고있어서 개념이 어렵게 받아들여지지 않을 것이다.

pytorch에서 dataloader를 사용할 때 얘가 iterator 패턴 사용하는 것 같다.

데이터를 순차적으로 불러올 때 __next__()로 불러오게하면 iterator 패턴을 사용하는 데이터를 만들 수 있다.

아는 패턴이 나와서 뭔가 기뻤다.

728x90
반응형

'스터디 > 디자인 패턴' 카테고리의 다른 글

9주차-2. Command  (0) 2021.07.21
9주차-1. Composite  (0) 2021.07.21
8주차-1. Chain of responsibility  (0) 2021.07.08
7주차-2. Visitor  (0) 2021.06.23
7주차-1. Flyweight  (0) 2021.06.23
Comments