관리 메뉴

HAMA 블로그

빌더패턴? 자바의 빌더 패턴? Gof 의 빌더패턴? 본문

소프트웨어 사색

빌더패턴? 자바의 빌더 패턴? Gof 의 빌더패턴?

[하마] 이승현 (wowlsh93@gmail.com) 2017. 6. 8. 13:25


자바진영에서 주로 말하는 Factory 패턴이 그러하듯. ( Gof 의 추상팩토리, 팩토리 메소드 패턴과는 전혀 상관없는..)  빌더패턴도 Gof 의 빌더패턴과 그냥 자바진영에서 하나의 객체 생성에 대한 좁혀진 정의가 따로 있으며, (혹은 Effective java 저자인 자바 구루 조슈아 블로흐의 두리뭉실함에서 기인된) 그걸 사람들이 혼동하는것 같다. (내가 오버하는 것일 수도 있는데 사람들은 그것을 혼동하는게 아니라, 그냥 그것만 알고 있는 것일 수도 있겠다.즉 차용예제만)  해외 싸이트들에서도 대부분 혼동/혼용하는거 같고 가끔 그 부분을 언급하는 사람이 있는데 , 이 문제가 맞고 틀림이라기 보다는 물컵의 물의 양에 대해 서로 다른 말을 하는 것 같은 부분도 있기 때문에 , 일단 여기에 대충 끄적거리다가 언제 한번 정리해야겠다. 


Gof - 빌더패턴 "의도"는 단지 이것이다.  

  • Separate the construction of a complex object from its representation so that the same construction process can create different representations. [GoF, p97]
  • Parse a complex representation, create one of several targets.

즉 각기 다른 능력을 지닌 concreate 객체를 생성하는데 있어서 통일 된 방식을 제공하는 것이다.통일된 방식이 필요 하기 때문에 concreate 객체의 상위 인터페이스가 필요하며, 그 인터페이스를 통해서 Director 는 최종적으로 만들어질 상세 구현체를 알 필요 없이, 그냥 통일된 방식 그대로 생성을 해 줄 따름이다. 물론 상세 구현체는 client 에서 결정하게 된다. 이게 기본이며 추가적으로 concreate 객체를 생성하는데 있어서 하나씩 따로 따로 내부의 객체를 생성해서 하나로 묶어서 리턴한다든지, 그 이외의 스토리는 빌더패턴의 특징이라고 생각한다. 내가 무조건 옳다는 것은 아니다. 항상 그러하듯 나중에 생각을 바꿔 먹을 수 있다. 많은 예제들은 a,b,c 를 각기 따로 만들어서 그것을 하나로 묶어서 리턴하는 예를 따르고 있다. (머리,몸통,다리 만들어서 사람or사자 리턴하기) (밥,국,반찬 만들어서 설렁탕or순대국으로 리턴하기) (의문문,평서문,명령문을 각기 만들어서 일어r영어번역서로 리턴하기) Effective Java 에서는 예를들어 사람 (VO) 이라는 객체(빈즈)를 만드는데 있어서 나이,성별,국적등을 내부 빌더에 의해 따로 setting 되게 한다라는 것인데...(이유는 많은 수의 매개변수를 가독성이 좋게 정리하는것과 동시에 쓰레드 안전하게 처리하기 위한 것) 왜 빌더패턴을 언급했는지는 알겠는데 좀 느낌이 다르다고 생각된다.


Java 빌더패턴 설명 -> http://using.tistory.com/71

Gof 빌더패턴 설명 ->  http://palpit.tistory.com/191

0 Comments
댓글쓰기 폼