와챠의 우당탕탕 코딩 일기장

[JAVA 디자인 패턴] - 4, Factory Method 패턴 본문

코딩 일기장/JAVA 디자인 패턴

[JAVA 디자인 패턴] - 4, Factory Method 패턴

minWachya 2020. 10. 2. 11:08
반응형

Factory Method Pattern

 

Factory Method 패턴은

상위 클래스에서 추상적인 공장과 추상적인 제품을 만들고(공장과 제품이 갖춰야 할 틀을 만들고),

하위 클래스에서 구체적인 공장과 구체적인 제품을 만드는 패턴이다.

 

그리고 이 패턴은 디자인 패턴 3번째에서 배운 Template Method 패턴의 응용이다.

(제품 생산의 큰 흐름을 결정하는 Factory Method)

 

예제로는 추상적인 공장을 상속받아 과자 공장 클래스를 만들고,

추상적인 제품을 상속받아 행운 번호를 갖고 있는 과자 클래스를 만들어 보았다.

 

 

Factory Method 패턴의 클래스 다이어그램

  • framework 패키지 = 추상적인 틀을 결정하는 클래스들의 모음
    • Factory 클래스 = 공장이 갖추어야 할 틀을 가진 추상 클래스
      • create 메소드 = 제품 생산의 큰 흐름을 결정하는 Factory Method
    • Product 클래스 = 제품이 갖추어야 할 틀을 가진 추상 클래스
  • snack 패키지 = 구체적인 내용을 결정하는 클래스들의 모음
    • SanckFactory 클래스 = 과자를 생산하는 과자 공장 클래스, 제품을 생산하고, 행운 번호를 저장, 관리함
    • Sanck 클래스 = 행운 번호를 가진 과자 클래스

 

 

실행 결과

 

framework의 Factory 클래스와 Product 클래스를 상속받으면

행운 번호를 가진 어떠한 제품이라도 만들 수 있고,

그 제품을 생산하는 공장도 얼마든지 쉽게 지을 수 있다.

 

예를 들면 framwoek 패키지 안의 추상적인 제품과 공장 클래스를 상속받아

refrigerator 패키지에 행운 번호를 가진 냉장고와, 그 냉장고를 생산하는 냉장고 공장도 같은 흐름대로 만들 수 있다.

 

 

Factory Method 패턴의 장점

추상적인 공장, 제품(framwoek 패키지)과

구체적인 공장, 제품(snack 패키지)을 분리함으로써 얻어지는 장점

  • 추상적인 공장과 제품 클래스수정 없이 다른 구체적인 공장과 제품을 만들 수 있다.
  • 클라이언트(Main)는 공장이 어떻게 돌아가는지 알지 못한다.
    • (ex - Sanck 클래스를 수정한다 해도 Main에서는 오류가 날 일이 없다.)

또 다른 장점

  • Template Method 패턴과 같이 제품의 생산 방법이 동일해진다(로직 공통화).
    • (Factory Method인 create 메소드를 통해)

 

Factory Method 패턴과 Template Method 패턴의

같은 점

상위 클래스의 추상 메소드를 하위 클래스에서 구체화한다.

 

하위 클래스들이 상속받은 추상 메소드를 어떻게 정의하든,

하나의 큰 흐름으로 흐르게 하는 메소드가 있다. (Factory Method, Template Method)

(ex -  위 예제의 Factory Method인 create 메소드는 제품을 생산하고 행운 번호 저장한다는 큰 흐름을 가지고 있음)

다른 점

Factory Method 패턴 - Factory Method는 큰 흐름을 결정하면서 인스턴스(Product, 제품)도 함께 생산한다.

Template Method 패턴 - Template Method는 큰 흐름만 결정하고 그 안에서 인스턴스를 생성하진 않는다.

 

 

 

JAVA 언어로 배우는 디자인 패턴 입문(p 84~94) 참고

반응형
Comments