728x90
반응형
이터레이터 패턴(Iterator 패턴)
- 여러 종류의 Collection을 하나의 Interface로 조회하는 패턴
- Iterator 패턴은 컬렉션(데이터 집합)을 탐색하거나 순회하는 방법을 추상화하는 패턴입니다.
- 반복문을 사용해서 개발자가 직접 인덱스를 통해 각각의 원소를 꺼내오는 대신, 자동으로 모든 원소를 차례대로 꺼내서 작업을 연속적으로 할 수 있게 해주는 행동 패턴(Behavioral Pattern)의 일종입니다. 반복로직을 구현과 분리가 가능하다는 장점이 있습니다.
이 패턴은 컬렉션 내부 구현을 클라이언트 코드로부터 숨기고, 컬렉션의 요소를 반복적으로 열거하거나 접근하기 위한 일관된 인터페이스를 제공합니다. 이를 통해 클라이언트 코드는 컬렉션의 구조를 알 필요 없이 요소에 접근할 수 있습니다. 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 접근할 수 있는 방법을 제공합니다.
- iterator 패턴은 배열이나 Linked_List, Tree처럼 다른 데이터 구조를 갖는 Aggregator의 구성 항목을 표준화된 공통 API로 접근할 수 있습니다.
- 데이터 구조가 다른 Aggregator일지라도 구성 항목을 표준화된 공통 API로 접근할 수 있음으로 하나의 공통된 알고리즘으로 처리할 수 있습니다.
Iterator패턴 구성요소
- Iterator(반복자): 컬렉션 내부를 순회하며 요소에 접근하기 위한 인터페이스를 정의합니다.
- ConcreteIterator(구체적인 반복자): Iterator 인터페이스를 실제로 구현한 클래스로, 컬렉션 내의 요소를 순회하기 위한 로직을 포함합니다.
- Aggregate(집합체): 동일한 데이터들의 집합으로, ConcreteIterator 객체를 반환하는 인터페이스를 제공합니다.
- ConcreteAggregate: Aggregate 인터페이스를 구현한 실제 컬렉션 클래스로, ConcreteIterator를 생성하고 반환하는 메서드를 구현합니다.
export interface Iterator {
next(): any;
hasNext(): boolean;
}
export interface Aggregator {
createIterator(): Iterator;
}
export class ConcreteIterator implements Iterator {
private collection: any[] = [];
private position: number = 0;
constructor(collection: any[]) {
this.collection = collection;
}
public next(): any {
var result = this.collection[this.position];
this.position += 1;
return result;
}
public hasNext(): boolean {
return this.position < this.collection.length;
}
}
export class Numbers implements Aggregator {
private collection: number[] = [];
constructor(collection: number[]) {
this.collection = collection;
}
public createIterator(): Iterator {
return new ConcreteIterator(this.collection);
}
}
function show() : void {
var nArray = [1, 7, 21, 657, 3, 2, 765, 13, 65],
numbers: Numbers = new Numbers(nArray),
it: ConcreteIterator = <ConcreteIterator>numbers.createIterator();
while (it.hasNext()) {
console.log(it.next());
}
}
show();
728x90
반응형
'개발공부 일지 > 면접' 카테고리의 다른 글
Template Method(템플릿 메서드) 패턴 (0) | 2023.10.09 |
---|---|
Command(커맨드) 패턴 (0) | 2023.10.08 |
MVC vs MVP vs MVVM (0) | 2023.10.04 |
전략 패턴(Strategy Pattern) (0) | 2023.10.03 |
자바스크립트)Throttling(쓰로틀링) vs Debounce(디바운스) (0) | 2023.10.03 |
댓글