[CS] 이터레이터 패턴(iterator pattern)CS/CS2022. 9. 20. 21:56
Table of Contents
이터레이터 패턴(iterator pattern)이란?
- 이터레이터(반복자)를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴
ㄴ 여러가지 자료형의 구조와는 상관 없이 이터레이터라는 하나의 인터페이스로 순회 가능.
더보기
이터러블한 객체 :
반복 가능한 객체로 배열을 일반화한 객체
const mp = new Map()
mp.set('a', 1)
mp.set('b', 2)
mp.set('c', 3)
const st = new Set()
st.add(1)
st.add(2)
st.add(3)
for (let a of mp) console.log(a)
for (let a of st) console.log(a)
/**
* ['a', 1]
* ['b', 2]
* ['c', 3]
* 1
* 2
* 3
*/
ㄴ다른 자료 구조인 set과 map임에도 똑같은 for a of b라는 이터레이터 프로토콜을 통해 순회하는 것을 볼 수 있음
//이터레이터 패턴 예시
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public interface Aggregate {
public abstract Iterator createIterator();
}
public class BookShelf implements Aggregate {
private Book[] books; // 책의 집합
private int last = 0; // 마지막 책이 꽂힌 위치
public BookShelf(int size) {
books = new Book[size];
}
public Book getBook(int index) {
return books[index];
}
public int getLength() {
return last;
}
// 책꽂이에 책을 꽂는다
public void appendBook(Book book) {
if (last < books.length) {
this.books[last] = book;
last++;
} else {
System.out.println("책꽂이가 꽉 찼습니다!");
}
}
@Override
public Iterator createIterator() {
return new BookShelfIterator(this);
}
}
public class BookShelfIterator implements Iterator<Book> {
private BookShelf bookShelf; // 검색을 수행할 책꽂이
private int index = 0; // 현재 처리할 책의 위치
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
}
@Override
public boolean hasNext() {
return index < bookShelf.getLength();
}
@Override
public Book next() {
Book book = bookShelf.getBook(index);
index++;
return book;
}
}
//메인함수
public class Main {
public static void main(String[] args) {
BookShelf bookShelf = new BookShelf(10);
Book book1 = new Book("Bilbe");
Book book2 = new Book("Cinderella");
Book book3 = new Book("Daddy-Long-Legs");
bookShelf.appendBook(book1);
bookShelf.appendBook(book2);
bookShelf.appendBook(book3);
System.out.println("현재 꽂혀있는 책 : " + bookShelf.getLength() + "권");
Iterator it = bookShelf.createIterator();
while (it.hasNext()) {
Book book = (Book) it.next();
System.out.println(book.getName());
}
}
}
'CS > CS' 카테고리의 다른 글
[CS] 전략 패턴(strategy pattern, 정책 패턴(policy pattern) (0) | 2022.09.20 |
---|---|
[CS] 프록시 패턴(proxy pattern) (1) | 2022.09.20 |
[CS] 프로그래밍 패러다임(Programming paradigm) (0) | 2022.09.20 |
[CS] 팩토리 패턴(factory pattern) (1) | 2022.09.20 |
[CS] 디자인 패턴이란? (0) | 2022.09.20 |
@Yanako :: Yana's coding story였는데요, 우당탕탕 개발일지가 맞는것같
야나의 코딩 일기장 :) #코딩블로그 #기술블로그 #코딩 #조금씩,꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!