닭발개발

[헤드퍼스트 디자인패턴] 27일차. 361-373pg 본문

책책책 책을 읽읍시다‼ ver.개발/[ 헤드퍼스트 디자인패턴 ]

[헤드퍼스트 디자인패턴] 27일차. 361-373pg

D269 2023. 6. 1. 15:25
728x90

27일차

헤드퍼스트 디자인패턴 [5주차_수요일]
361-373pg

요약

CHAPTER 09. 컬렉션 잘 관리하기 (feat. 반복자 패턴과 컴포지트 패턴)

  • 객체 저장방식을 보여 주지 않으면서도 클라이언트가 객체에 일일이 접근할 수 있게 해 주는 방법

 
[ 반복자 패턴 ]

  • 반복자 패턴이 Iterator 인터페이스에 의존한다는 사실!
  • 컬렉션 : 객체를 모아 놓은 것. 리스트, 배열, 해시테이블 같은 다양한 자료구조에 컬렉션을 보관할 수 있는데, 어떤 자료구조를 사용하든 결국 컬렉션은 컬렉션 (집합체라고 하기도 한다.)
  • 반복자를 사용하면 그 안에 들어있는 모든 항목에 접근할 수 있게 하려고 여러 메소드를 외부에 노출시키지 않으면서도, 컬렉션에 들어있는 모든 객체에 접근할 수 있습니다.
  • 반복자를 구현한 코드를 컬렉션 밖으로 끄집어낼 수 있다는 장점도 있다.
  • 따라서 반복작업을 캡슐화 했다고 할 수 있다.

[ Iterator가 장착된 신형 종업원 코드 ]

  • 메뉴 구현법이 캡슐화, 종업원은 메뉴에서 메뉴 항목 컬렉션을 어떤 식으로 저장하는지 전혀 모른다.
  • 반복자만 구현한다면 다형성을 활용해서 어떤 컬렉션이든 1개의 순환문으로 처리할 수 있다.
  • 종업원은 인터페이스(반복자)만 알면 된다.

[ 인터페이스 개선하기 ]

  • java.util.Iterator 인터페이스
    • remove() 메소드 : next() 메소드에서 마지막으로 리턴한 항목을 컬렉션에서 삭제하는 기능 추가
    • java.util에 Iterator 인터페이스도 있지만 ArrayList에 반복자를 리턴하는 iterator() 메소드도 있다. 즉, ArrayList에서 별도로 Iterator를 구현할 필요 없음.

[ 반복자 패턴의 정의 ]
- 컬렉션의 구현방법을 노출하지 않으면서 집합체 내의 모든 항복에 접근하는 방법을 제공한다.
- 디자인에 반복자를 적용했을 때 얻는 효과 : 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일되어 있으면 종류에 관계없이 모든 집합체에 사용할 수있는 다형적인 코드를 만들 수 있다.
- 반복자 패턴을 사용하면 모든 항목에 일일이 접근하는 작업을 컬렉션 객체가 아닌 반복자 객체가 맡게 된다는 사실.
 

발췌

💡 반복작업을 캡슐화 : 반복자를 사용하면 그 안에 들어있는 모든 항목에 접근할 수 있게 하려고 여러 메소드를 외부에 노출시키지 않으면서도, 컬렉션에 들어있는 모든 객체에 접근할 수 있습니다. 반복자를 구현한 코드를 컬렉션 밖으로 끄집어낼 수 있다는 장점도 있다.
💡 java.util.Iterator 에서 remove()는 필수가 아니다. 사용하고 싶지 않으면 예외로 처리한다.

 
 
 
 
 

728x90
반응형