♬ Factory Method란?
Factory Method는 수퍼 클래스에서 오브젝트를 작성하기 위해 인터페이스를 제공합니다.
이 때 어떤 클래스의 인스턴스를 만들지는 '서브클래스에서 결정'합니다.
디자인 원칙 중
Dependency Inversion Principle에 기인한 패턴입니다.
DIP(의 역전 원칙) : 추상화된 것에 의존하도록 만들고, 구상 클래스에 의존하지 않도록 만든다.
즉, 팩토리 메소드 패턴에서
메소드는 객체를 생성하고 반환합니다.
♬ Problem
여러분은 물류 관리 응용 프로그램을 만들고 있습니다.
이 때 첫 번째 Truck(Road Logistics)은 운송만을 처리할 수 있으므로 대부분의 코드는 Truck 클래스 내부에 구현됩니다.
그 후에 공장 물류 운송이 활발해져
Ships(Sea Logistics)가 추가됩니다. 뿐만 아니라 여러 운송방법도 추가될 수 있겠죠?
Truck Class가 구현된 코드에 Ships Class도 추가해야 하는 상황이 발생합니다.
이 때 여러분들은 코드를 어떻게 구현하실건가요?
이렇게 코드를 짜다보면 스파게티 코드가 될 가능성이 높아집니다.
이를 해결하기 위해 어떻게 효율적인 코드를 구현해야 할까요?
♬ Solution
Factory Method Pattern은 'new' 오퍼레이터를 사용해 '오브젝트 구성을 위한 직접적인 호출' --> '팩토리 메소드 호출'로 대체하는 해결책을 줍니다.
즉 객체는 처음과 마찬가지로 new로 생성되지만,
팩토리 메소드 내에서 호출되는 것이죠!
위에서 제기된 문제를 해결하면 이와 같이 다이어그램을 그릴 수 있습니다.
좀 더 쉽고, 전체적인 다이어그램을 살펴보겠습니다.
Product
: 인터페이스 선언 class, 모든 오브젝트에 공통적으로 적용되는 인터페이스.
Concrete Products
: Product interface의 다른 구현 (예. ship class / truck class)
Creator class
: new product 객체를 반환. return 유형은 product interface와 일치해야 함.
+) 팩토리 메소드를 abstract로 선언한 후, 모든 서브 클래스가 고유한 메소드를 구현하도록 할 수 있음.
Concrete Creators
: 기본 팩토리 메소드 재정의. 다른 타입의 product를 return해야 함.
예시 CODE
'OLD_달려라 > 소프트웨어공학' 카테고리의 다른 글
Design Pattern ] Singleton Pattern (0) | 2020.07.02 |
---|---|
Design Pattern] Builder (0) | 2020.07.02 |
GUI Swing ] Factory Method Pattern (0) | 2020.07.01 |
Design Pattern] Abstract Factory (0) | 2020.06.28 |
댓글