달력

05

« 2012/05 »

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

'패턴/디자인패턴'에 해당되는 글 4

  1. 2009/12/04 생성패턴
  2. 2009/12/04 디자인 패턴 사용 방법
  3. 2009/12/03 디자인 패턴 관계도
  4. 2009/12/03 디자인 패턴이란?
2009/12/04 19:01

생성패턴 패턴/디자인패턴2009/12/04 19:01

생성패턴은 객체를 만드는 절차를 추상화하는 패턴입니다. 왜 이것을 써야 하냐구요? new 연산자로 그냥 만들면 되는데 왜 이런 ~~패턴이라는 녀석을 꼭 적용해서 써야만 하는 것일까요? 맞습니다. new 연산자로 그냥 만들면 됩니다. 자, 지금부터 생성 패턴이 왜 필요한 지 알아봅시다 ^^

요즘 많은 분들이 카드를 쓰십니다. 좋죠. 혜택도 많구요. 다만 절제력이 약하다면 신용불량자가 될 지도 모릅니다. ^^; 어쩃든 저는 카드가 필요합니다. 카드를 한번 만들어보죠 ^^

Card myCard = new Card();

오우!! 카드가 만들어졌네요 +_+ 이제 카드를 쓰시면 됩니다. 아... 그런데 법이 바뀌었다고 합니다. 반드시 이름을 넣어야 카드를 사용할 수 있다네요. 그래서 새로 카드를 만듭니다.

Card myCard = new Card("스쿨쥐");

야호~ 새로운 카드가 발급 되었습니다. 약간의 변경은 있었지만 제가 원하던 카드가 만들어졌네요. 이제 쇼핑을 즐겨볼까요? 아... 또 법이 바꼈답니다. 카드 발급이 쉬우니까 신용불량자도 많이 생겼고, 국가에서 좀 엄격하게 심사를 해서 발급하라고 하는군요. 신분증 사본을 내라고 하네요. 그래서 운전면허증을 제출해서 만들려고 합니다.


DriverLicence licence = new DriverLicence("스쿨쥐");
Card myCard = new Card("스쿨쥐", licence);

아... 아직까지는 간단한 듯 보입니다. 하지만 불안한 기운이 엄습해오는군요. 법이 바뀔 때마다 점점 늘어가는 코드량에 약간씩 두려움을 느낍니다. 아니나다를까 이젠 소득증빙도 해야한답니다. 그리고 제출한다고 무조건 발급되는 것이 아니라 제출한 증명서(신분증 사본, 소득증빙서류)를 내부적인 심사를 거쳐서 발급해준다고 하는군요. 심사를 통과를 못하면 발급을 안해준다고 합니다.

DriverLicence licence = new DriverLicence("스쿨쥐");
IncomeDoc incomeDoc = new IncomeDoc("스쿨쥐");

Card myCard = null;
if(licence.vaild() && incomeDoc.getS
alary() >= 3000) { myCard = new ("스쿨쥐");

점점 복잡해지는군요. 그런데 생각을 해보니 카드는 여러 종류였던 것입니다. 신용카드, 체크카드, 기프트카드 등등 이런 종류에 따라 발급 조건이 다 다르다고 합니다. 카드사마다 정책도 다르구요. 이제는 단순 코딩, 단순 new 연산만을 사용해서 하기에는 복잡도가 너무나도 커졌습니다.

이제는 new 연산자가 아니라 카드를 전담하는 무엇인가가 필요하다는 것을 느끼게 되었습니다. 즉, 카드 발급(카드 생성)을 전담하는 클래스(또는 클래스들)이 필요하게 되었고, 사용자 입장에서는 그 카드들이 어떠한 조건을 거쳐서 발급되는지 알 필요는 없습니다. 단지 카드가 발급되어서 받기만 하면 되니까요.

자, 어떠신가요? 이런 이유에서 우리는 이런 객체를 만드는 패턴을 생각하게 되었고 이러한 것들을 가리켜서 생성패턴이라고 명명하게 된 것이죠.

그럼 생성패턴에는 어떠한 것들이 있는지 한번 알아보겠습니다.

 Abstract Factory  추상 제품들과 추상 공장들을 만들어내는 패턴(조립방법 없음, 공장 여러개, 부품종류 여러개)
 Builder  객체를 생성하는 방법과 객체를 구현하는 방법을 분리하는 패턴(조립방법 별도 관리)
 Factory Method  상위클래스에서 부품을 조립하고 하위클래스에서 부품 생성을 하는 패턴(조립방법 포함, 공장 하나, 부품종류 하나)
 Prototype  클래스로 공장 종류를 만드는 것이 아니라 견본 공장으로부터 인스턴스를 복사해서 사용하는 패턴
 Singleton  인스턴스가 반드시 하나만 있어야할 때 사용하는 패턴

GoF에서 나오는 생성패턴은 모두 5가지입니다. 각각의 패턴이 어떤 경우에 사용되는지 잘 확인하시고 사용하시면 될 것 같습니다. 앞으로 생성패턴에 대해서 하나하나 자세히 알아가보겠습니다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'패턴 > 디자인패턴' 카테고리의 다른 글

생성패턴  (0) 2009/12/04
디자인 패턴 사용 방법  (0) 2009/12/04
디자인 패턴 관계도  (0) 2009/12/03
디자인 패턴이란?  (0) 2009/12/03
Posted by 스쿨쥐
2009/12/04 15:56

디자인 패턴 사용 방법 패턴/디자인패턴2009/12/04 15:56

GoF 패턴의 목록입니다. GoF패턴을 모두 읽으신 후 실제로 적용해야할 때 어떤 것을 선택해야할 지 고민스럽습니다. 그래서 간단한 요약을 통해서 적절한 판단을 할 수 있도록 참조용 표를 한번 만들어보았습니다. 

경고 : 
패턴은 함께 사용할 때 진정한 힘을 발휘하며, 중요한 것은 패턴 카탈로그에 나오는 구조가 아니라 의도와 적용시점이라는 점을 명심하십시오.


1. 생성 패턴
 Abstract Factory  제품 객체군(큰 공장)
 Builder  복합 객체 생성 방법(감독자와 빌딩건축)
 Factory Method  인스턴스화될 객체의 서브클래스(작은 공장)
 Prototype  인스턴스화될 객체 클래스(인스턴스 복사)
 Singleton  클래스의 인스턴스가 하나일때(워3의 영웅)

2. 구조 패턴
 Adapter  객체에 대한 인터페이스(호환성)
 Bridge  객체 구현(기능과 구현의 분리)
 Composite  객체의 합성과 구조(트리, 재귀구조)
 Decorator  서브클래싱 없이 객체의 책임성(원본유지, 위임기능추가)
 Facade  서브시스템에 대한 인터페이스(안내소, 프런트)
 Flyweight  객체의 저장 비용(인스턴스 공유, pool)
 Proxy  객체 접근 방법(프록시 서버, 매니저)

3. 행동 패턴
 Chain of Responsibility  요청을 처리하는 객체(책임 떠넘기기)
 Command  요청의 처리 시점과 처리 방법(요청의 캡슐화)
 Interpreter  언어의 문법과 해석 방법(문법 규칙을 클래스로 표현)
 Iterator  집합 객체 요소들의 접근 방법 및 순회 방법(컬렉션 처리, 순차처리)
 Mediator  어떤 객체들이 어떻게 상호작용하는지?(분산처리)
 Memento  언제 어떤 정보를 객체의 외부에 저장하는지?(history, snapshot, save파일)
 Observer

 다른 객체에 종속적인 객체 수(1:N)

 종속적인 객체들의 상태 변경 방법(모델과 뷰의 관계)

 State  객체의 상태
 Strategy  알고리즘 교체(동적인 교체)
 Template Method  알고리즘의 단계(상위:처리의 흐름, 하위:처리의 세부내용)
 Visitor  클래스의 변경없이 객체에 적용할 수 있는 연산(순차가 아닌 특정 로직형태로 처리)
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'패턴 > 디자인패턴' 카테고리의 다른 글

생성패턴  (0) 2009/12/04
디자인 패턴 사용 방법  (0) 2009/12/04
디자인 패턴 관계도  (0) 2009/12/03
디자인 패턴이란?  (0) 2009/12/03
Posted by 스쿨쥐
2009/12/03 20:03

디자인 패턴 관계도 패턴/디자인패턴2009/12/03 20:03

GoF 디자인 패턴의 관계도입니다. 패턴을 한번 적용하면 끝나는 것이 아니라 요구사항이 변함에 따라 다른 해결책을 모색해야할 때가 있습니다. 그러한 결정을 내릴 때 도움이 되는 관계도입니다. 

예를들어 관계도 가장 아래쪽에 있는 Facade 패턴을 적용했다고 합시다. 하지만 이 Facade의 구현체가 반드시 하나의 인스턴스를 통해서 제공되어야 한다면 어떻게 해야할까요? 그럴때 Singleton 패턴을 적용하는 것입니다. 

이와같이 패턴은 서로간의 관계를 가지고 있습니다. 이 그림이 그러한 판단을 내리는 데 도움이 됩니다. ^^


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'패턴 > 디자인패턴' 카테고리의 다른 글

생성패턴  (0) 2009/12/04
디자인 패턴 사용 방법  (0) 2009/12/04
디자인 패턴 관계도  (0) 2009/12/03
디자인 패턴이란?  (0) 2009/12/03
Posted by 스쿨쥐
2009/12/03 19:50

디자인 패턴이란? 패턴/디자인패턴2009/12/03 19:50

혹시 게임을 좋아하시나요? 저는 온라인 게임을 좋아해서 리니지, 라그나로크, 디아블로, 최근에는 아이온까지 많은 게임을 해왔습니다. 꼭 온라인 게임이 아니더라도 CD게임도 많죠. 

이러한 게임을 하다보면 일정한 공략법이 생깁니다. 보스몹을 공략하는 법, 축구 게임에서 크로스를 잘 넣는 법, 상대방과 PK상황일 때 대처법 등등 여러가지 상황에 따른 대처법 또는 공략법이 생기지요. 그래서인지 한가지 게임을 잘 하게 되면 다른 종류의 게임도 잘 적응하게 됩니다.

이처럼 어떤 공통 또는 반복적으로 발생하는 문제에 대해서 해결할 수 있는 방법을 바로 패턴이라고 합니다. 또한 소프트웨어 개발에 있어서 반복적으로 발생하는 문제에 해법을 바로 디자인 패턴이라고 합니다.

디자인 패턴에는 아주 많은 패턴들이 있습니다. 그 중에서 가장 널리 알려진 것이 바로 GoF 패턴입니다. 일반적으로 디자인 패턴이라고 부르면 GoF 패턴을 의미합니다. GoF 패턴은 크게 생성패턴, 구조패턴, 행동패턴으로 나누어져 있습니다. 

이제부터 GoF 패턴에 대해서 하나하나 알아보겠습니다. ^^
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'패턴 > 디자인패턴' 카테고리의 다른 글

생성패턴  (0) 2009/12/04
디자인 패턴 사용 방법  (0) 2009/12/04
디자인 패턴 관계도  (0) 2009/12/03
디자인 패턴이란?  (0) 2009/12/03
Posted by 스쿨쥐