이터레이터 패턴 iterator pattern
은 이터레이터 iterator
를 사용하여 컬렉션 collection
의 요소들에 접근하는 디자인 패턴입니다.
이를 통해 순회할 수 있는 각기 다른 자료형의 구조와는 상관없이 이터레이터라는 하나의 인터페이스로
순회가 가능해서 코드의 효율화, 숫자형 index가 아닌 string 등 다양한 인덱스를 기반으로 순회를 쉽게할 수 있다.
Iterator<MenuItem> iterator = breakfastMenu.createIterator();
while(iterator.hasNext()){
MenuItem menuItem = iterator.next();
}
Iterator<MenuItem> iterator = lunchMenu.createIterator();
while(iterator.hasNext()){
MenuItem menuItem = iterator.next();
}
---
// 각기 다른 메뉴(엔티티)에서 iterator createItrator 메서드 정의
@Override
public Iterator<MenuItem> createIterator() {
return menuItems.iterator(); //ArrayList 컬렉션은 반복자를 리턴하는 iterator() 라는 메소드가 있음.
}
@Override
public Iterator<MenuItem> createIterator() {
return new DinerMenujIterator(menuItems);
}
---
java 내장 함수의 Iterator를 각 메뉴 엔티티가 구현하여
메서드 재정의
@Override
public MenuItem next() {
MenuItem menuItem = list[position];
position += 1;
return menuItem;
}
@Override
public boolean hasNext() {
if(position >= list.length || list[position] == null) return false;
else return true;
}
...
복잡한 로직의 구현없이 main에서 Iterator로 메뉴객체를 반복할 수 있다.
while(iterator.hasNext())
{
MenuItem menu= (MenuItem)iterator.next();
System.out.println("이름:" + menu.getName());
System.out.println("------------------");
}
---
//
이름: 메뉴1
-------------
이름: 메뉴2
-------------
//
이런식으로 콘솔에 찍히게 된다.