태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


DesignPattern을 공부하고 있는 나에게,
나와 같은 문제로 고민하고 있는 어떤 분의 질문에 대한 대답이 적힌 게시물을 찾아볼수 있어,
이렇게 포스팅을 한다.
Abstract Factory Pattern - Builder Pattern
>
> {buider-pattern vs Abstract Factory-pattern}
> {오정공주(guest)}
>
> buider-pattern 은 Abstract Factory-pattern 처럼 여러개의 메소드로 구성된 
> 클래스와 객체를 반환하다는 점에서 같다고 합니다 
> 근데 반면엔 Abstract Factory-pattern가 연관된 클래스들을 반환하고 
> Builder-pattern 은 데이터에 따라 복합객체를 구축한다는 점에서 다른다구 하네여
> 이 차이점이 혹시 상속의 의미와 무슨 연관이 있나여 클래스를..반환한다는 것과 
> 복합객체를 구축(?)한다는 것 반환이라는거와는..틀린가..암튼..무신 차이점인지
> 걍 책의 내용만 봐서는..먼지 잘 모르겠습니다. 
> 두개다 추상 클래스에서 상속받아 새로운 클래스와 객체를 반환하는데 특별히 머가 
> 틀린지 잘모르겠습니다.
> 그럼..고수님들의 가르침을 바라며....총총총..

제가아는 패턴이야기...
먼저, 빌더패턴과 Abstract Factory-pattern을 이해하기 위해서는
GoF의 23가지 패턴중 몇개는 사전이해가 필요하지 않을까 합니다...
그중에도 직접적으로 관련되어 쓰일수있는 패턴은
빌더패턴:
- Template Method 패턴, Composite패턴, Abstract Factory패턴, Facade패턴
Abstract Factory-pattern:
- Builder패턴, Factory Method패턴, Composite패턴, Singleton패턴 
이 있을수 있겠습니다...

질문에서...
사실 전체적으로 질문내용의 요지(빌더패턴과 Abstract Factory-pattern이 어떻게
다른지)는 이해를 할수 있었지만 구체적인 부분에 있어서는 거의 이해를 하지 못했습니다.
패턴을 이해하는 방식에서의 차이지 않을까 합니다...

> buider-pattern 은 Abstract Factory-pattern 처럼 여러개의 메소드로 구성된 
> 클래스와 객체를 반환하다는 점에서 같다고 합니다 

반환하는 타입을 보면, 빌더 패턴에서는 반환타입의 지정이 없는것이 표준이지 않을까
합니다..(반환하는 무엇을 필요시 둘수도 있겠지만요)
Abstract Factory-pattern에서는 Abstract Factory역할을 맡은 클래스는 자기자신인
Abstract Factory의 인스턴스를 반환해야만 합니다...

> 근데 반면엔 Abstract Factory-pattern가 연관된 클래스들을 반환하고 
> Builder-pattern 은 데이터에 따라 복합객체를 구축한다는 점에서 다른다구 하네여
> 이 차이점이 혹시 상속의 의미와 무슨 연관이 있나여 클래스를..반환한다는 것과 
> 복합객체를 구축(?)한다는 것 반환이라는거와는..틀린가..암튼..무신 차이점인지
> 걍 책의 내용만 봐서는..먼지 잘 모르겠습니다. 
> 두개다 추상 클래스에서 상속받아 새로운 클래스와 객체를 반환하는데 특별히 머가 
> 틀린지 잘모르겠습니다.

이부분은 이해를 못했습니다...

> 그럼..고수님들의 가르침을 바라며....총총총..

저는 결코 고수가 아니며, 곰부를 게을리하지않는 엔지니어이려고 노력하는 한사람일
뿐 모르는게 너무 많습니다..

이야기가 어디까지 길어질지 모르지만
(이게 걱정..특히나 Abstract Factory-pattern이 23개중 제일 복잡하고 등장인물이 많은
만큼 이해하기도 쉽지 않기땜시...)
지금부터 제가 이해하고 있는 빌더패턴과 Abstract Factory-pattern의 이야기를 하기로
하지요... 차이점은 두개의 패턴이 어떨때 어떤 형태로 쓰이는 지에 대해 이해를 하게되면
자연히 알 수 있겠지요....

먼저 이 두개의 패턴을 이해하기 위해 필요한 최소한의 사전지식에 대해 열거해
보겠습니다..

1.UML에 대해 기본적인 이해를 하고 있어야 하지 않을까 합니다....
  모든 패턴의 설명은 UML의 표현이 기본이 되고 있는것 같습니다.

2.디자인패턴의 전체적인 보는시각에의 이해
  이거는 직접 설명을 하지요..
  디자인 패턴은 말그대로 설계시에 참조할수 있는 표준적인 설계패턴입니다..
  "유우끼 히로시"씨의 책 디자인 패턴 입문에서는 디자인패턴에 대해 이런 비유를
  하고 있습니다...
  디자인 패턴은 백설공주의 연극과 같다고요... 무슨 말인지 하면 백설공주연극에는
  주인공인 백설공주역을 하는 배우가 있고  나쁜 왕비역의 배우가 있고 일곱난장이역의
  배우가 있고 또 왕자역의 배우가 있어며 이 백설공주는 나쁜 왕비에 의해 죽었다가
  왕자와 키스 함으로서 되살아난다는 스토리가 있습니다..
  연극을 하는 시대와 지역에 따라 구체적인 배우는 틀려지지만 역할과 스토리가 같으면
  그것은 백설공주의 연극인 것입니다.. 연극얘기만 길게해서 죄송..
  디자인 패턴도 각각의 클래스가 맡은 배역(역할)이 있고 각각의 맡고 있는 역할에 따라
  해야하는 스토리(작업)이 정해져 있습니다..
  이러한 역할과 동작만 일치하면 그 구체적인 배우(구현하는 분야 즉 내용)에는 관련없이
  같은 패턴인 것입니다.

3. 이 두가지 패턴은 둘다 인스턴스를 작성 패턴이라는 면에서 공통점이 있습니다..
   그러므로 인스턴스를 작성하는 다른 기본적인 패턴인 Singleton(Hans Bergsten's 
   DBConnectionManager Pool-게시판에 자료가 있음- 이 그 예입니다)과Prototype패턴에
   대해 이해를 하고 있으면 이해가 더욱쉽지 않을까 합니다..(필수는 아니라고 봅니다)
   또, Abstract Factory-pattern이라는 말에서 보듯이 이패턴은 Factory-pattern을
   이해하는것이 사전의 필요조건이지 않을까 합니다....

4. 이 두가지 패턴이 인스턴스를 만드는 패턴이라고 하였습니다..
   자바에서 인스턴스를 만드는데 쓰는 방법에 대해 좀더 정확한 이해가 필요하지 않을까
   합니다.. (인스턴스를 만드는데 클래스명이 필요한 경우)
   - new
   (인스턴스를 만드는데 클래스명이 필요없는경우)
   - clone: Prototype패턴참조
   - newInstance
   패턴은 구체적인 작업내용을 가지고 작업을 하는게 아니라 배역과 스토리가 있기
   때문에 예상하시다시피 clone, newInstance와 친하다고 보시면 될것 같습니다...

5. Facade패턴-빌더패턴의 Director역과 닮아 있습니다..
위의 전제조건의 이야기는 이걸로 줄이지요... 아직 빌더패턴도 얘기 못했는데...

사실 설명에 자신이 없습니다...
정확한 이해(제가 이해하고 있는것이 정확하다는 자신도 없지만요)를 위해서는 동작하는
샘플 프로그램이 필요하고 그프로그램에 나오는 등장인물(클래스들)에 대한 UML이
필요하며 다시 클래스의 역할을 하나씩 확인해 나가는 과정에서 스토리가 이해가 될 수
있다고 생각하는데요 얼마나 길어지고 시간이 소요될지....
일단 각 패턴의 등장인물만 소개하고 줄이도록 하겠습니다..


빌더패턴....
빌더패턴은 복잡한 건축물을 지을때 한번에 다지을 수 없듯이 각각의 작업을 구성한 후
단계를 밟듯이 조립해 나간다고 보시면 될 듯 합니다..
등장인물(클래스)
기본적으로 3개의 역할(클래스)이 있습니다. 이 패턴에 작업을 의뢰하는 Client를 
포함하면 4개의 역할이 됩니다..

1.빌더(건축자)역
2.ConcreteBuilder(구체적 건축자)역
3.Director(감독자)역
4.Client(의뢰인)역
  
Abstract Factory-pattern
Abstract Factory-pattern은 추상적공장(Abstract Factory)이 추상적 부품(Abstract
Product-부품)을 이용하여 추상적 제품(Abstract Product-제품)을 만드는 것입니다..
등장인물
1.Abstract Factory
2.Abstract Product1,2,3
  (Abstract Product중에는 Abstract한 부품과 Abstract한 제품이 있습니다)
3.Concrete Factory
4.Concrete Product1,2,3
  (Concrete Product중에는 Concrete 한 부품과 Concrete 한 제품이 있습니다)
이상입니다..

도대체 지금까지 무슨얘기를 했느냐고요..
저도 구체적인 UML과 예제 클래스를 준비하면 설명이 쉽고 이해도 더욱 명확해 지리라
생각이 들지만 백설공주(buider-pattern)와 그것보다 두배는 이야기가 긴 햄릿(Abstract
Factory-pattern)을 전체적으로 정리하기는 2주는 소요될것 같습니다...
다음에 기회가 있으면 정리해서 올려보도록 하지요.
지금 출근해서 두시간째 이글을 쓰고 있습니다... 서론밖에 못 썼는데도요.

여기 내용은 거의 100프로 유우끼 히로시씨의 책에서 이해한 대로의 그의 사상을 옮긴
것이라 보시면 됩니다..(잘못 이해한 부분도 있을 수 있다는 거지요)
Posted by THLIFE.net

TRACKBACK http://thlife.net/trackback/758 관련글 쓰기

댓글을 달아 주세요