요약
- 템플릿 메소드 패턴
- 반복자 패턴과 컴포지트 패턴
- 객체 마을 식당과 팬케이크 하우스 합병
- 자격 요건 구현하기
- 반복을 캡슐화하기
메모
디자인 도구상자 안에 들어가야 할 도구들
- 템플릿 메소드 패턴
- 알고리즘의 골격을 정의함.
- 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있음.
컬렉션 잘 관리하기 : 반복자 패턴과 컴포지트 패턴
객체 마을 식당과 팬케이크 하우스 합병
- 객체마을 식당 메뉴는 배열로 구현함.
- 팬케이크 하우스는 메뉴를 ArrayList로 구현함.
- 이 두 식당의 합병 → 메뉴를 통합해야함.
- 종업원이 각 객체 메뉴들을 합병해야함.
- printMenu()를 구현해야 함.
자격 요건 구현하기
- printMenu() 구현해야 함.
- 팬케이크 하우스에서는 ArrayList 로 메뉴 아이템을 가져옴
- 객체마을 식당에서는 배열로 메뉴 아이템을 가져옴
- 서로 다른 리턴 형식을 가지므로, 메뉴 아이템을 출력할때, 서로 다른 순환문을 돌며 반복 작업을 수행해야 함..
- 사실, getMenuItems 메소드의 리턴 형식을 제외하면 거의 같다고 볼 수 있음.
- 각 메뉴에 똑같은 인터페이스를 구현할 수 있다면 정말 편리함.
- 여러 순환문을 쓸 필요가 없음.
반복을 캡슐화하기
- “바뀌는 부분을 캡슐화하라” 가 중요했음.
- 지금은 반복 작업 처리가 바뀌는 부분임.
- 리턴하는 객체 컬렉션 형식이 다르기 때문.
- 객체 컬렉션 반복 작업을 처리하기 위해 캡슐화한 Iterator 객체를 만들어볼 수 있음.
Iterator iterator = breakfastMenu.createIterator();
while (iterator.hasNext()) {
MenuItem menuItem = iterator.next();
}
- 클라이언트에서 hasNext()와 next()를 호출하면 무대 뒤에서 반복자가 배열의 인덱스를 써서 MenuItem 항목을 꺼낸다. 혹은, ArrayList의 get() 메소드를 호출한다.