Skip to content

Latest commit

 

History

History

09-Iterator-and-Composite-Patterns

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

09 Iterator and Composite Patterns

Iterator Pattern

aggregate object(data 의 collection 을 들고있는 object) 의 세부 구현을 드러내지 않으면서 그것의 elements 들을 순차적으로 접근할 수 있는 방법을 제공하는 디자인 패턴

image

  • SRP(Single Responsibility Principle)
    • 하나의 클래스는 변경될 하나의 이유를 가져야한다
  • Cohesion
    • high cohesion : 하나의 클래스가 하나의 기능을 함
    • low cohesion : 하나의 클래스가 서로 관련이 적은 여러 기능을 함
    • 즉, SRP 를 잘 지키면 high cohesion, 안 지키면 low cohesion 이 됨
  • iterator pattern 은 iteration 기능을 캡슐화하여 aggregate 으로 부터 분리함으로써 SRP 를 지킬 수 있게 한다.
    • aggregate 은 data 들의 collection 을 가지고 있는 class 라고 보면된다
  • 왜냐하면 분리하기 전에는 collection 의 세부 구현과 iteration 이라는 두가지 책임을 가지기 때문이다
  • iteration 은 client 가 aggregate 의 세부 구현을 몰라도 되게 함으로써 둘 사이의 커플링을 낮춘다

Composite pattern

객체들이 트리구조를 이루도록 하여 Client 가 Composites(내부노드)와 Individual Objects(리프노드)를 구분하지 않고 사용할 수 있도록 하는 디자인 패턴

image

  • client 가 단 한번의 메소드 호출만으로도 모든 노드에 대해 특정 동작을 수행하게 함으로써 client 가 해야할 일을 단순하게 만들어 준다는 것이 가장 큰 장점이다

  • Iterator pattern 과 함께 사용할 수 있다(재귀적으로 구현)

  • internal iteration vs external iteration

    • internal iteration 은 functional programming 에서처럼 client 가 collection 에 대해 operation 을 정해주면 내부적으로 iteration 을 수행하는것
    • external iteration 은 client 가 직접 iteration 을 수행하는것
  • Composite Pattern 에서 Iterator Pattern 을 같이 사용하여 CompositeIterator 를 만들면, 서브 트리를 순회하는 iterator 만 재귀적으로 사용하는 것이 아니라, Client 가 전체 노드를 순회하는 iterator 를 얻을 수 있다.

  • 이를 활용한 예로, 전체 노드들 중 특정 조건에 해당하는 노드만 뽑아 내는 것이 가능하다