티스토리 뷰

디자인 패턴 - 행동 패턴 10개 중

  • 메멘토 패턴
  • 상태 패턴
  • 비지터 패턴

3개에 대해 공부한 내용의 포스팅입니다.


메멘토 패턴

실행 취소 / 다시 실행 구현을 가능하게 해 주는 패턴이다.

원본을 메멘토라고 하는 복사본으로 저장하고 그 메멘토를 가지고 특정 시점으로 되돌리기가 가능하다.

메멘토는 특정 상태를 객체에 저장하여 리턴하는 방식으로 실행 취소를 구현할 수 있게 된다.

메멘토 패턴 구조

원본의 상태를 저장하고 있는 메멘토를 만들고 케어테이커에서 메멘토를 스택으로 관리하게 된다. 요청이 생길 시 일치하는 메멘토를 반환하여 적용시키면 된다.

 

 


 

상태 패턴

객체의 상태가 변경될 때 상태를 객체화 하여 해당 객체가 그의 행동을 변경할 수 있도록 하는 행동 패턴이다.

상태들은 enum이 아닌 클래스로 정의한다.

조건문(switch)에 기반한 상태머신은 상태에 의존하는 행동을 추가 할수록 유지보수가 어려워진다. 

따라서 상태들은 클래스로 구현되고 상태가 이전되면 클래스를 변경해 주는 패턴이다.

 

유한 상태기계인 FSM과 밀접한 개념을 띄고 있다.

상태 패턴 예시

상태들의 수가 많거나 상태별로 코드가 자주 변경될 때 사용하길 권장한다. 또 상태머신의 천이(전환 규칙)가 많을 때도 사용하길 권장한다.

 

전략 패턴과 비슷해 보이나 차이점이 있는데 다음에 포스팅할 전략 패턴은 클라이언트(외부) 에서 직접 새로운 상태를 주입한다. 허나 상태 패턴은 스스로 할 수 있다는 점이 다르다.

 

 


 

비지터 패턴

클래스에 새로운 기능을 추가할 때, 작성되어 있는 기존 클래스가 아니나 방문자(Visitor)라는 클래스를 만들고 방문자 클래스 내부에 새로운 기능을 추가하여 사용하는 방식이다. 

기존 코드의 수정 없이 새로운 방문자를 추가하는 것만으로 기능 확장이 가능해진다.

 

비지터의 예시로 다음 A를 출력하는 클래스가 있다.

그리고 비지터 클래스인 b, c, ir, A 클래스가 있다. 기존 클래스에 b, c 비지터 클래스를 출력하면 다음과 같아질 것이다.

그러면 비지터 클래스의 기능이 추가되어 Abc가 출력된다. 비지터를 4개 출력하면 두 번째 그림과 같이 나올것이다.

A라는 기존 클래스에 기능이 추가 된 것은 아니지만 비지터를 여럿 둠으로서 추가된 기능을 제공받을 수 있게 된다.

 

비지터 패턴은 두 가지 유형이 있다.

  1. 순환 방문자
  2. 비순환 방문자

이다.

 

순환 방문자는 함수 오버로딩에 기반한다. 오버로딩에 기반하니 클래스 계층과 방문자 간에 상호 참조가 가능하며 종속성이 발생한다.

비순환 방문자는 RTTI에 의존한다. 따라서 클래스 계층에 제한이 없지만 RTTI특성상 성능상에 단점이 있을 수 있다.

 

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함