달력

10

« 2018/10 »

  •  
  • 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
  •  
  •  
  •  

'Diagram'에 해당되는 글 3

  1. 2016.06.07 Adapter Pattern (2)
  2. 2016.05.02 UML의 기본 구성-시퀀스 다이어그램 (4)
  3. 2016.05.02 UML의 기본 구성-클래스 다이어그램
2016.06.07 16:33

Adapter Pattern 프로그래밍/디자인패턴2016.06.07 16:33




Adapter Pattern에 대해사 알아 보도록 하겠습니다.


해당 패턴을 알아 보기전에 한가지 문제점에 대해서 먼저 알고 넘어가야 합니다.


[상황]

1. [인사]를 출력하는 클래스가 존재


[추가 할 내용]

1. [닉네임]을 추가로 출력 필요

2. [닉네임]을 먼저 출력 하거나, 인사를 먼저 출력 할 수 있음


물론 [인사]를 출력하는 부분에서 [닉네임]을 받아서 함께 처리 하여도 됩니다.


하지만, 


기존의 코드를 수정하고 싶지 않을 경우, 또는 하지 못하는 경우에 다음과 같은 방법을 사용합니다.


먼저 해당 부분은 2가지 방법이 존재하는데 


interface 를 사용하는 상속으로만 해결 하는 방법과,

상속, 위임(포함)을 통한 방법이 있습니다.


물론 2가지 모두 Adapter Pattern 입니다.


코드를 확인하도록 하겠습니다. 


StringPrint라는 interface를 추가로 제작해서 기존의 기능을 두면서 원하는 기능을 추가하였습니다.


현재 단계에서는 interface를 사용하든 확장된 클래스를 사용 하던 큰 차이는 없으나,

사용자에게 좀더 명확함을 주기 위해서 interface를 사용하는 것을 추천합니다.


그리고 두번째 방법으로 

상속, 위임을 통한 방법에 대해서 알아 보도록 하겠습니다. 


이렇게 Adapter Pattern을 사용해서 문제를 해결하는 방법에 대해서 알아 보았습니다. 


Adapter Pattern에 대해서 정의를 내리면 책에서는 다음과 같이 이야기 합니다. 


- Wrapper(감싸는) Pattern 이라고도 함 

- 이미 작동 하고 있는 ( 문제가 없는, 충분히 테스트된 ) 코드를 수정하지 않고, 개조하기 위해서 사용.

- 구 버전과의 호환성을 제공 할 수 있음.


마지막으로 용어 적인 부분과 다이어 그램을 확인 하고 Adapter Pattern은 마무리 짓도록 하겠습니다.


용어적인 부분

- Target( 예제 코드의 Interface [StringPrint]나, 가상 클래스인 [StringPrint] class )

- Client( Main 실행 코드, 예제 코드의 [AdapterClass] class )

- Adaptee( 예제 코드의 [HelloPrint] class  )

- Adapter( 예제 코드의 [NamePrint] class )


다이어그램으로 표현

인터페이스를 사용한 Adapter Pattern


위임(포함)을 사용한 Adapter Pattern



다음은 Template Method Pattern 에 대해서 알아 보도록 하겠습니다.


'프로그래밍 > 디자인패턴' 카테고리의 다른 글

Factory Mathod Pattern  (0) 2017.04.12
Template Method Pattern  (0) 2016.06.30
Adapter Pattern  (2) 2016.06.07
Iterator Pattern  (0) 2016.05.04
UML의 기본 구성-시퀀스 다이어그램  (4) 2016.05.02
UML의 기본 구성-클래스 다이어그램  (0) 2016.05.02
Posted by 안식의후크



클래스 다이어그램에 비하면 조금 더 가독성이 높은 편,


실제 내부적으로 어떻게 구성 되어 있는지 표현하는게 클래스 다이어그램이라면


시퀀스 다이어그램은, 구성된 내용들이 어떻게 동작하는지 보여 준다고 보면됩니다.



표현을 빌리면,


시간에 의해 변하지 않는 것(정적인 관계) = 클래스 다이어그램

시간에 따라 변하는 것(동적인 관계) = 시퀀스 다이어그램


이라고 보시면됩니다.


실제 예제를 보면 다음과 같습니다.





1 ~ 2. 손님이 입장 후 서빙 직원에게 요리를 주문합니다.


3 ~ 4. 직원은 해당 내용을 종이에 작성 한 후 그 리스트를 요리사에게 전달 합니다.


5 ~ 6. 요리사는 해당 요리를 제작 완료된 요리를 직원에게 다시 전달합니다.


7. 직원은 해당 요리를 손님에게 전달합니다.


8. 식사 진행


9 ~ 10. 직원에게 계산 후 퇴장


2 ~ 9 까지는 손님 수만큼 계속 반복됩니다.



시퀀스의 경우 기본적인 설명은 여기까지만 하고, 그 이후에 사용되는 표현에 대해서는 그때 그때 명시하도록 하겠습니다.


다음은 Iterator 패턴에 대해 알아 보도록 하겠습니다.

'프로그래밍 > 디자인패턴' 카테고리의 다른 글

Adapter Pattern  (2) 2016.06.07
Iterator Pattern  (0) 2016.05.04
UML의 기본 구성-시퀀스 다이어그램  (4) 2016.05.02
UML의 기본 구성-클래스 다이어그램  (0) 2016.05.02
다시 시작하는 디자인패턴  (0) 2016.04.29
데코레이터(Decorator) 패턴  (1) 2010.04.04
Posted by 안식의후크



디자인 패턴에 들어 가기에 앞서 UML을 알아둬야 할 필요성이 있습니다.


Unified Modeling Language의 약자로 설계문서를 시각화 한다고 정의 되어 있습니다.

지금 설명하는 것들은 모두 클래스 다이어그램입니다.


가장 기본적인 상속 구조를 알아 보도록 하겠습니다.



해당 그림은 다음과 같습니다.

- 부모 클래스가 가상 클래스(이탤릭)로써, 자식 클래스가 상속을 받은 형태

- 부모클래스에는 변수, 스태틱 변수( 밑줄 )가 존재

- 부모 클래스는 가상함수(이텔릭)와 함수가 존재

- 자식 클래스는 변수X, 부모로써 상속받은 가상함수와 스태틱함수(밑줄) 존재

- 각 변수나 함수 앞에 기호는 public은 +, protected는 #, private는 -로 표기



다음은 인터페이스 설명입니다.


- 가상 클래스와 비슷하지만 직선 대신 점선 사용.

- 변수, 함수 그대로 사용.

- << interface >> 와 같이 인터페이스 표기


집약(포함) 표기



- 인스턴스의 갯수와 상관없이 표기

- 0..*은 최소 0개부터 무제한

- 바구니에는 x개의 과일이 존재하고 과일은 모두 색상을 가지고 있다.

- 집약 관계에는 깊은, 얕은 관계가 존재 깊은 관계에는 마름모안에 공간을 채운다.

- 집약의 대상이 사라졌을( 삭제 되었을 때 ) 남아 있을 수 있다면, 얕은 집약관계, 함께 사라진다면( 삭제 된다면 ) 깊은 집약 관계라고 볼 수 있다.


클래스의 관계 표기



책에서 보는것과, StarUML을 사용해서 표기 하는것과는 조금 다른 부분이 존재 하는데 일단 중요한거 같지 않으니 무시하고 넘어 가겠습니다.


다음 장에서는, 시퀀스 다이어그램을 간단하게 살펴보도록 하겠습니다.

Posted by 안식의후크