생성패턴은 객체를 만드는 절차를 추상화하는 패턴입니다. 왜 이것을 써야 하냐구요? new 연산자로 그냥 만들면 되는데 왜 이런 ~~패턴이라는 녀석을 꼭 적용해서 써야만 하는 것일까요? 맞습니다. new 연산자로 그냥 만들면 됩니다. 자, 지금부터 생성 패턴이 왜 필요한 지 알아봅시다 ^^
요즘 많은 분들이 카드를 쓰십니다. 좋죠. 혜택도 많구요. 다만 절제력이 약하다면 신용불량자가 될 지도 모릅니다. ^^; 어쩃든 저는 카드가 필요합니다. 카드를 한번 만들어보죠 ^^
Card myCard = new Card();
오우!! 카드가 만들어졌네요 +_+ 이제 카드를 쓰시면 됩니다. 아... 그런데 법이 바뀌었다고 합니다. 반드시 이름을 넣어야 카드를 사용할 수 있다네요. 그래서 새로 카드를 만듭니다.
Card myCard = new Card("스쿨쥐");
야호~ 새로운 카드가 발급 되었습니다. 약간의 변경은 있었지만 제가 원하던 카드가 만들어졌네요. 이제 쇼핑을 즐겨볼까요? 아... 또 법이 바꼈답니다. 카드 발급이 쉬우니까 신용불량자도 많이 생겼고, 국가에서 좀 엄격하게 심사를 해서 발급하라고 하는군요. 신분증 사본을 내라고 하네요. 그래서 운전면허증을 제출해서 만들려고 합니다.
DriverLicence licence = new DriverLicence("스쿨쥐");
Card myCard = new Card("스쿨쥐", licence);
Card myCard = new Card("스쿨쥐", licence);
아... 아직까지는 간단한 듯 보입니다. 하지만 불안한 기운이 엄습해오는군요. 법이 바뀔 때마다 점점 늘어가는 코드량에 약간씩 두려움을 느낍니다. 아니나다를까 이젠 소득증빙도 해야한답니다. 그리고 제출한다고 무조건 발급되는 것이 아니라 제출한 증명서(신분증 사본, 소득증빙서류)를 내부적인 심사를 거쳐서 발급해준다고 하는군요. 심사를 통과를 못하면 발급을 안해준다고 합니다.
점점 복잡해지는군요. 그런데 생각을 해보니 카드는 여러 종류였던 것입니다. 신용카드, 체크카드, 기프트카드 등등 이런 종류에 따라 발급 조건이 다 다르다고 합니다. 카드사마다 정책도 다르구요. 이제는 단순 코딩, 단순 new 연산만을 사용해서 하기에는 복잡도가 너무나도 커졌습니다.
이제는 new 연산자가 아니라 카드를 전담하는 무엇인가가 필요하다는 것을 느끼게 되었습니다. 즉, 카드 발급(카드 생성)을 전담하는 클래스(또는 클래스들)이 필요하게 되었고, 사용자 입장에서는 그 카드들이 어떠한 조건을 거쳐서 발급되는지 알 필요는 없습니다. 단지 카드가 발급되어서 받기만 하면 되니까요.
자, 어떠신가요? 이런 이유에서 우리는 이런 객체를 만드는 패턴을 생각하게 되었고 이러한 것들을 가리켜서 생성패턴이라고 명명하게 된 것이죠.
그럼 생성패턴에는 어떠한 것들이 있는지 한번 알아보겠습니다.
| Abstract Factory | 추상 제품들과 추상 공장들을 만들어내는 패턴(조립방법 없음, 공장 여러개, 부품종류 여러개) |
| Builder | 객체를 생성하는 방법과 객체를 구현하는 방법을 분리하는 패턴(조립방법 별도 관리) |
| Factory Method | 상위클래스에서 부품을 조립하고 하위클래스에서 부품 생성을 하는 패턴(조립방법 포함, 공장 하나, 부품종류 하나) |
| Prototype | 클래스로 공장 종류를 만드는 것이 아니라 견본 공장으로부터 인스턴스를 복사해서 사용하는 패턴 |
| Singleton | 인스턴스가 반드시 하나만 있어야할 때 사용하는 패턴 |
GoF에서 나오는 생성패턴은 모두 5가지입니다. 각각의 패턴이 어떤 경우에 사용되는지 잘 확인하시고 사용하시면 될 것 같습니다. 앞으로 생성패턴에 대해서 하나하나 자세히 알아가보겠습니다.
'패턴 > 디자인패턴' 카테고리의 다른 글
| 생성패턴 (0) | 2009/12/04 |
|---|---|
| 디자인 패턴 사용 방법 (0) | 2009/12/04 |
| 디자인 패턴 관계도 (0) | 2009/12/03 |
| 디자인 패턴이란? (0) | 2009/12/03 |

