본문 바로가기

GoF디자인패턴「생성편」

by Recstasy 2020. 12. 11.

 디자인패턴이 절대적인 원칙은 아니다.

 

패턴은 설계과정에서 도출된 가장 효율적인 방법일 뿐이다. 반드시 패턴을 사용할 필요는 없다. 특히, 생성패턴은 자주 사용하지 않는 편이 좋다. '패턴' 자체가 갖고 있는 복잡함이 버그를 발생할 가능성을 높이기 때문이다. 상황을 고려하지 않고, 무조건 생성패턴을 자주 사용하다보면 오히려 new를 사용하는 것보다 못할 때가 있다.

 

언제나 유스케이스에서 도출된 상위정책이 중요하다. 상위정책으로부터 아키텍처 경계를 구분하는 과정에서 자연스럽게 드러난 컴포넌트와 이에 따른 객체들간의 『메시지-관계』가 소프트웨어 설계의 핵심이다.

 

 단, 디자인패턴을 알고 있고, 이를 활용할 수 있는 분야를 정확하게 알고 있다면 개발 아이템에 관한 영감(?)을 받을 확률이 높아진다. 또한 효율성 높은 구현을 통해 빠르게 개발할 수 있다는 장점이 있다. 디자인패턴과 좋은 설계의 관계는 닭이 먼저냐 달걀이 먼저냐의 문제다.

 

패턴 설명 분야
싱글턴
(SINGLETON)
·도구상자 모델



사용빈도 : ★★★☆☆
추천 : ★☆☆☆☆
특징 : 전역변수 사용, SOLID위배 주의


싱글턴은 영화 '매트릭스2'의 키메이커이자

놀이동산의 자유이용권과 비슷하다.

싱글턴 패턴을 사용한다면,
특정 클래스를 딱 1번만 복사할 수 있다.(전역변수 사용)
그러므로 프로그램 어느 곳에서나 접근할 수 있으며, 

복사를 딱 한번만 해야 할 때, 싱글턴을 고려해보자.

싱글턴 포스팅 : https://webdoli.tistory.com/413

 


·
파일선택 도구상자

· 컬러선택 도구상자
· 사용자 설정
· 레지스트리 설정
· 히스토리 관리자
빌더
(BUILDER)
·카테고리 모델


사용빈도
 : ★★★☆☆

추천 : ★★★☆☆
특징 : 크고 복잡한 객체를 쉽게 생성할 수 있음


빌더패턴은 메인보드와 비슷하다.


만일 메인보드와 CPU, 램이 접착제로 딱 붙어서
한번 조립해버리면 영원히 탈·부착할 수 없도록 출시된다면?  

빌더패턴은 마치 메인보드와 같은 인터페이스를 만들어
중요한 기능들을 꽂는 구조를 만드는 방식이다.
따라서 보드에 꽂는 기기(객체)에 따라

시스템 전체가 변경될 수 있다.


[Builder 다이어그램]


· 변동GUI
· 자석UI기능
·
자체 카테고리 기능 

팩토리 메서드
(FACTORY
METHOD)
·플러그인 모델



사용빈도
 : ★★★☆☆

추천 : ★★★★☆
특징 : 간단한 프로그램 제작에 유리


팩토리 메서드 패턴은
『완성차 - 협력업체』로 생각할 수 있다.

완성차 업체를 생각해보자.
아무리 럭셔리, 슈퍼카 브랜드라 할지라도
100% 자사의 부품으로만 차를 완성하는 업체는 없다.

팩토리 메서드 패턴은 브랜드를 확보한 업체(완성차)에서
각종 부품을 협력업체에 위탁하는 방법과 비슷하다.

빌더 패턴을 자동차 업체라고 생각해보면,
본사 내의 자회사에 부품을 생산하는 상황이다.
반면, 팩토리 메서드 패턴은 자회사가 아닌
타협력업체에 부품생산을 맡기는 셈이다. 

[팩토리메서드 다이어그램]

· 파일확장자 변환 도구
· 랜더링 기능(플러그인)
· 라이브러리 플러그인

프로토타입
(PROTOTYPE)
·레이어 모델


사용빈도
 : ★★★★★

추천 : ★★★★☆
특징 : 복잡한 객체를 복사하는 상황에 유리


프로토타입 패턴은 게임의 npc와 같다.


게임의 엄청난 양의 몬스터들은
모두 특정 원본의 복사본들이다.

프로토타입은 복잡한 객체를 한 번만 생성하게 한 뒤,
약간의 수정과 동시에 다수의 객체로 복사할 수 있도록 한다.


[프로토타입 다이어그램]


원본 객체가 별로 복잡하지 않다면

굳이 프로토타입을 사용할 필요가 없다.

하지만 대체적으로 객체-복사 기능은 유용할 때가 많고, 
대규모 객체생성에 있어 프로토타입 패턴은 필수적이다. 



· RPG게임 몬스터
· 레이어 복제기능
추상팩토리
(ABSTRACT
FACTORY)
·통합관리 
프랜차이즈
모델




사용빈도
 : ★★★☆☆

추천 : ★★★☆☆
특징 : 교체가능한 중급 이상 프로그램 제작에 편리함


추상팩토리 패턴은 글로벌 프랜차이즈 시스템과 비슷하다.





위의 그림에 표시된 지역은 나이키의 생산공장이다.
알다시피 나이키 본사는 광고만 한다. 

한국의 경우, 태광실업과 같은 협력업체에서 신발을 생산하며,
나이키가 진출한 타국가 역시 상황은 똑같다.

나이키 본사는 사람들 머리속에 있는(추상화) 개념일 뿐,
실제 제품은 각 국가의 생산업체가 담당한다.
그리고 나이키와 같은 시스템이 바로 추상팩토리 패턴이다.

클라이언트는 나이키 마크가 찍혀있는 제품을 통해
나이키(추상화 클래스)를 이용하고,
나이키의 브랜드를 상속받은 생산업체(신발, 옷, 가방 등)의 제품을 구입함으로써
다시 나이키(지역 매장)를 만난다.



[추상팩토리 다이어그램]

· 자체 API제작
· 통합관리 시스템
· 대시보드 제작

 

『다이어그램 출처. ES6 자바스크립트 패턴 || 향단코드 || 2019』

'코드 스터디' 카테고리의 다른 글

GoF 디자인 패턴「행위편」  (0) 2020.12.15
GoF디자인패턴「구조편」  (0) 2020.12.14
싱글톤 패턴  (0) 2020.12.10
커맨드 패턴  (0) 2020.12.09
탬플릿 매서드, STRATEGY 패턴 [행위]  (2) 2020.12.08

댓글

최신글 전체

이미지
제목
글쓴이
등록일