본문 바로가기
소프트웨어공학론

Behavioral Pattern

by 학식러 2023. 5. 18.

 

 

3. Behavioral Pattern types

1) Iterator Pattern

: 내부적인 표현을 드러내는 것 없이 객체의 요소들을 순서대로 접근한다.

어떤 데이터 구조로 표현되어 있는가 하는 것을 드러내는 것 없이 aggregate로부터 원소 하나씩 꺼내서 무언가를 하는 것.

 

aggregate(합계, 집합체) : 여러개의 객체를 담고있는 또다른 객체

ex) 배열, 리스트, 스택, ...

 

정수의 배열에서 정수의 원소 하나씩 꺼내서 전체 합을 구한다.

그런데 안에 있는 원소가 배열, 리스트, ... 어떤 데이터 구조로 표현되어 있는가 하는 것은 관심 가지지 않는다.

 

데이터를 공급하는 역할의 Aggreate,

그것을 순서대로 꺼내서 Client에게 주는 Iterator.

Client는 Aggreate와 Iterator를 사용해서 ConcreteAggregate, ConcreteIterator와 같은 내부 구조를 모르더라도 데이터를 꺼내서 합을 구하기, 평균 구하기, ... 를 할 수 있게된다.

 

IsDone() : Iterator에는 그 다음 원소가 있는지 없는지를 판별하는 API인 IsDone()이 주어져야 한다.

Next() : 아직 안 끝났으면 다음 원소 꺼내는 연산.

 

데이터를 갖고있는 클래스의 이름은 다를 수 있지만 반복할 수 있는 인터페이스 Iterator는 공통으로 둔다.

Client입장에서는 공통적인 인터페이스를 통해 어느 클래스에서든지 반복해서 원소를 가져오는 부분은 코드가 변경되지 않는다.

컬렉션들이 내부적으로 어떤 구조인지 몰라도 된다. -> decoupling

 

Aggregate = Iterable 인터페이스, 이터레이터를 만들어내는 메서드를 제공

 

 

2) Observer Pattern

: 관찰대상, 관찰자 두 객체들 사이에 어떤 상호작용이 있는지 설계하는 패턴.

Subject에서 일어나는 하나의 이벤트를 여러 관찰자들이 같이 볼 수 있는 publish(Notify) / subscribe(Attach) 패턴.

 

Subject : 관찰 대상 클래스

Observer : 관잘자 클래스

Subject에 여러 명의 관찰자를 붙임, 떼기 연산이 들어가 있다.

관찰 대상에서 특별한 변화가 일어나면 관찰자에게 알려줘야 한다. 그래서 Notify()메서드가 Subject에 들어있다. 그러면 Observer는 알림을 받을 때 메서드 Update()를 호출한다.

Notify는 관찰자(O)의 Update메서드를 불러주는 것으로 되어있다.

 

 

 

 

 

 

'소프트웨어공학론' 카테고리의 다른 글

Sequence Diagram의 구현  (0) 2023.05.20
Coding - UML and Coding - Class diagram  (0) 2023.05.19
Structural Pattern  (0) 2023.05.11
Design patterns - Creational Pattern  (1) 2023.05.10
Design Principles - Solid  (0) 2023.05.06

댓글