코딩을 하다 보면, 내가 만들지 않은 다른 클래스를 사용 할 때 맨 처음 하는 것은 객체 생성이다.
객체 생성을 하고, 해당 객체를 온전하게 사용하기 위해서는 해당 클래스에대한 설명을 듣고, 함수 사용 방법을 익힌 뒤 생성된 객체를 통해 함수를 호출할 것이다.
피자를 만든다고 예를 들면, 아래와 같이 말이다.
Pizza *myPizza.= new PotatoPizza();
myPizza.prepare();
myPizza.bake();
myPizza.cut();
myPizza.box();
여기까지는 좋다. 하지만 실수는 언제나 있기 마련이다.
1) Pizza 클래스를 사용하는 클라이언트가 prepare() 함수를 호출하는 것을 뺴먹었다면? 어떤 피자는 자르면 안 되는데 cut() 함수를 호출해 버렸다면?
2) 다른 문제점이 생겨서 PotatoPizza() 클래스를 사용하는 경우에 .addPotato() 함수를 따로 호출하도록 만들어야 한다면?
3) 또, 사용하는 클라이언트 측에서는 어떤 피자 클래스가 있는지 알아야 된다.
위 문제를 해결하기 위해서 나온 것이 팩토리 메서드 패턴이다. 패턴은 아래와 같다.
위 이미지에서는 Product 가 Pizza 가 될 것이고, Pizza 를 만드는 함수를 감싸는 역할을 하는 것이 Creator 가 된다. 이때 우리가 쓸 Creator 를 PizzaStore() 라고 한다면, 코드는 아래와 같이 변할 수 있다.
PizzaStore *koreanPizzaStore = new KoreanPizzaStore();
Pizza * myPizza = koreanPizzaStore()->CreatePotatoPizza(); //(return PotatoPizza )
이렇게 되면, 클라이언트에서는 어떤 Pizza 클래스들이 있는지 일일히 찾아볼 필요도 없으며, PotatoPizza 를 만들기 위해 수정사항이 생긴다 해도 클라이언트 측에서는 PotatoPizza 에 대한 구현이 어떻게 되어있는지 알 필요도 없게된다.
'개발자의 길' 카테고리의 다른 글
[Java][SpringBoot] "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 강의노트 (0) | 2021.12.22 |
---|---|
[Design pattern] 추상 팩토리 패턴 ( Abstract Factory pattern ) (1) | 2020.09.15 |
[C++] C++에서 문자열 줄단위로 받기 (0) | 2018.09.29 |
[C++] C++에서 string 문자열을 받아와 split 하기 (0) | 2018.09.15 |
[Java, Android] Date, Calendar 클래스를 이용해 시간 표현하기 (0) | 2018.09.02 |