Java언어로 배우는 디자인패턴 입문 정리 - 4. Factory Method Pattern

양정훈·2021년 2월 4일
0
post-thumbnail

본 내용은 Java언어로 배우는 디자인패턴 입문(한빛미디어) 책을 보면서 정리한 내용입니다.

소개

  • 인스턴스를 만드는 방법은 상위 클래스에서 결정하지만, 구체적인 클래스 이름은 정하지 않음
  • 구체적인 것들은 모두 하위 클래스가 함
  • 인스턴스 생성을 위한 프레임워크와 실제로 인스턴스를 생성하는 클래스를 분리할 수 있음

실습예제

  • Product 클래스와 Factory 클래스는 framework 패키지에 속해 있음
  • 이 두 개의 클래스는 인스턴스를 생성하는 큰 흐름을 형성하는(프레임워크) 역할을 함.
  • IDCard 클래스와 IDCardFactory 클래스는 실제로 구체적인 인스턴스를 생성하고 idcard라는 패키지에 속해 있음
  • Main 클래스는 실제 동작을 담당

framework의 Product는 실제 제품을 담당. 추상 메서드 use만 선언되어 있고, 구체적인 구현은 모두 Product의 하위 클래스에게 맡김.

이 프레임워크에서 제품은 '무엇이든 사용할 수 있는 것'

Factory 클래스는 Template Method Pattern이 적용됨.
create라는 Template Method에서 createProduct()로 Product를 생성하고 registerProduct()로 Product를 등록한 뒤, 해당 Product를 리턴한다.

createProduct와 registerProduct는 하위 클래스에게 구현을 맡긴다.

IDCard 클래스는 실제로 Product를 상속 받아서, use를 구현한다.(예제에서는 추상 클래스를 사용하지만, 인터페이스도 가능할 듯 하다). 필드 중에는 소유자를 표현하는 String 타입의 owner 필드가 있다.

마지막으로 IDCardFactory 클래스는 Factory를 상속받고 createProduct와 registerProduct를 구현한다.
createProduct에서는 실제 생성자로 객체를 생성하고 리턴한다.
registerProduct에서는 IDCard의 owner를 등록시킨다.

Main에서는 실제로 IDCardFactory 클래스와 IDCard 클래스를 이용하여 실제 IDCard 객체를 생성한다.

예제의 UML 다이어그램은 다음과 같다.

UML 다이어그램

Factory Method의 UML은 다음과 같다.

정리

  • Creator의 역할
    - Product 역할 클래스를 생성하는 역할을 하는 추상 클래스
    • 구체적인 구현은 하위 클래스인 ConcreteCreator에게 맡김
    • Creator는 Product역할과 인스턴스 생성 메소드를 호출하면 Product가 생성된다는 것만 알고있음
  • Product의 역할
    - framework 쪽에 속해있고, Factory Method 패턴으로 생성된 인스턴스가 가지고 있어야 하는 인터페이스를 결정하는 추상 클래스
    • 구체적인 내용은 하위 클래스인 ConcreteCreator가 결정함
  • ConcreteCreator의 역할
    - 구체적인 제품을 만드는 클래스를 결정하는 idcard 패키지 쪽에 해당. IDCardFactory 클래스
  • ConcreteProduct의 역할
    - 구체적인 제품을 결정하는 idcard 패키지 쪽에 해당. IDCard 클래스

활용법

  • idcard 패키지는 framework 패키지를 import 하지만, framework 패키지는 구체적인 product를 몰라도 됨

factory Method 구현법

  • 추상 메서드로 하는 방법.
    - 추상 메서드로 만들어서 하위 클래스에서 반드시 구현시키는 방법
  • 디폴트 구현을 준비하는 방법
    - 디폴트 구현을 준비해두고 하위 클래스에서 구현을 하지 않을 경우 디폴트 메서드를 사용함.
  • 에러로 처리함
    - 디폴트 구현을 에러를 던지는 방식으로 만들어서, 하위 클래스에서 구현하지 않으면 에러 발생.

관련된 다른 패턴

  • Template Method Pattern
    - Factory Method Pattern은 Template Method Pattern을 응용한 전형적인 예시
  • Singleton Pattern
    - Creator 역할을 하는(또는 ConcreteCreator 역할) 클래스는 주로 Singleton으로 만들 수 있다
  • Composite Pattern
    - Product 역할(또는 ConcreteProduct 역할)에 Composite Pattern을 적용 가능
  • Iterator Pattern
    - Iterator Pattern에서 iterator 메서드가 Iterator의 인스턴스를 작성할 때, Factory Method Pattern이 사용되는 경우가 많음

참고

패턴 이용과 개발자간의 의사소통

  • 일반적으로 협업시에는 패턴을 사용시에 해당 패턴 사용을 다른 개발자가 알 수 있게 명시적으로 클래스 작성하기
profile
꿈을 현실로 만드는 성장형 인간

0개의 댓글