책너두 (헤드 퍼스트 디자인 패턴) 26일차 (~360p)

요약

  • 템플릿 메소드 패턴
    • 디자인 도구상자 안에 들어가야 할 도구들
      • 템플릿 메소드 패턴
  • 반복자 패턴과 컴포지트 패턴
    • 객체 마을 식당과 팬케이크 하우스 합병
    • 자격 요건 구현하기
    • 반복을 캡슐화하기

메모

디자인 도구상자 안에 들어가야 할 도구들

  • 템플릿 메소드 패턴
    • 알고리즘의 골격을 정의함.
    • 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있음.

컬렉션 잘 관리하기 : 반복자 패턴과 컴포지트 패턴

객체 마을 식당과 팬케이크 하우스 합병

  • 객체마을 식당 메뉴는 배열로 구현함.
  • 팬케이크 하우스는 메뉴를 ArrayList로 구현함.
  • 이 두 식당의 합병 → 메뉴를 통합해야함.
    • 종업원이 각 객체 메뉴들을 합병해야함.
    • printMenu()를 구현해야 함.

자격 요건 구현하기

  • printMenu() 구현해야 함.
    • 팬케이크 하우스에서는 ArrayList 로 메뉴 아이템을 가져옴
    • 객체마을 식당에서는 배열로 메뉴 아이템을 가져옴
    • 서로 다른 리턴 형식을 가지므로, 메뉴 아이템을 출력할때, 서로 다른 순환문을 돌며 반복 작업을 수행해야 함..
  • 사실, getMenuItems 메소드의 리턴 형식을 제외하면 거의 같다고 볼 수 있음.
    • 각 메뉴에 똑같은 인터페이스를 구현할 수 있다면 정말 편리함.
    • 여러 순환문을 쓸 필요가 없음.

반복을 캡슐화하기

  • “바뀌는 부분을 캡슐화하라” 가 중요했음.
    • 지금은 반복 작업 처리가 바뀌는 부분임.
    • 리턴하는 객체 컬렉션 형식이 다르기 때문.
  • 객체 컬렉션 반복 작업을 처리하기 위해 캡슐화한 Iterator 객체를 만들어볼 수 있음.
Iterator iterator = breakfastMenu.createIterator();

while (iterator.hasNext()) {
    MenuItem menuItem = iterator.next();
}
  • 클라이언트에서 hasNext()와 next()를 호출하면 무대 뒤에서 반복자가 배열의 인덱스를 써서 MenuItem 항목을 꺼낸다. 혹은, ArrayList의 get() 메소드를 호출한다.

댓글

Designed by JB FACTORY