salsa source

[디자인패턴]클래스다이어그램(2) 행위패턴 - 반복자, 관찰자, 전략 본문

STUDY/디자인패턴

[디자인패턴]클래스다이어그램(2) 행위패턴 - 반복자, 관찰자, 전략

dayofday 2018. 4. 2. 01:40

행위패턴


객체들 간 행위 및 알고리즘 등과 관련된 패턴

응용 분야에 따라 행위가 다른 객체로 옮겨가거나 알고리즘이 대체되는 경우


클래스행위패턴 > Interpreter, Template

객체 행위패턴 > Chain of Resposibility, Command, Iterator, Mediator, Memento, Observer, State, Strategy, Visitor






반복자패턴(Iterator Pattern/이터레이터  패턴)


- 내부 표현부를 노출하지 않고 어떤 객체에 속한 원소들을 순차적으로 접근할 수 있도록 하는 패턴.

  비공개 순회를 통하여 원하는 데이터를 탐색 가능하다.





장점

- 찾으려는 대상의 클래스 구현에 의존하지 않는다

- 클래스의 재이용화를 촉진시킨다.



활용 예시

- java list, map, set, array 등  링크



관련패턴

* Composite패턴 : 종종 Composite의 재귀구조접근에 응용된다.

* Factory Method 패턴


참고 : https://daddycat.blogspot.kr/2011/05/iterator-pattern.html







관찰자패턴(Observer Pattern/옵저버패턴/감시자패턴)


객체 간 일대다 의존관계를 정의해두어, 어떤 객체가 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 업데이트 될 수 있게 함.

상태 변경 시 옵저버 객체를 통해서 다른 객체들에게 알림




장점

- 옵저버-주제, 옵저버-옵저버 간 관계가 느슨함. 서로 미치는 영향이 적음

- 누군가 새로운 옵저버를 등록하거나 삭제되어도 알 필요 없음

- 주제 클래스의 변경 없이 상태변경 통지를 받을 옵저버 추가 가능



활용 예시

- 자바 이벤트 리스너(AWT, Swing 등의 UI객체들) 링크





관련 패턴

* Mediator패턴 : Mediator와 Colleague 역할이 통신할 때 옵저버패턴을 사용하는 경우가 있음


참고 : https://daddycat.blogspot.kr/2011/05/observer-pattern.html

     http://flowarc.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%98%B5%EC%A0%80%EB%B2%84-%ED%8C%A8%ED%84%B4Observer-Pattern




전략패턴(Strategy Pattern/스트래티지패턴)


알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 한다.

알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘 변경 가능하다.




장점

- 상속으로 해결 불가능한 코드 중복이나 객체의 실시간 알고리즘 변경 시 유용

- Strategy 추상객체를 상속해서 신규 알고리즘 추가가 용이하다(확장성)

- 추후 알고리즘 변경 시 해당 알고리즘만 수정하면 된다(클라이언트와 독립적으로 변경)



활용 예시

- 자바 comparator, 웹 프로그래밍 servelet  링크



관련 패턴 : 플라이웨이트패턴, 추상팩토리패턴, 상태패턴


참고 : https://daddycat.blogspot.kr/2011/05/strategy-pattern.html




Comments