이터레이터 패턴

박상준·2022년 8월 29일
0

면접지식

목록 보기
20/32

이터레이터 패턴

이터레이터 패턴 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
-------------
//
이런식으로 콘솔에 찍히게 된다.
  • 디자인 원칙중 바뀌는 부분을 캡슐화 하라! 라는 원칙에 따라 해당 패턴을 적용한다고 볼 수 있음.
profile
이전 블로그 : https://oth3410.tistory.com/

0개의 댓글