본문 바로가기
GoF의 디자인 패턴

팩토리 메소드(Factory method) 패턴

by 아토로 2022. 1. 4.

구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다.

 

다양한 구현체 (Product)가 있고, 그중에서 특정한 구현체를 만들 수 있는 다양한 팩토리 (Creator)를 제공할 수 있다.

구현 방법

확장에 열려있고 변경에 닫혀있는 구조로 만든다.

팩토리 메소드 패턴을 적용했을 때의 장점은? 단점은?

  • 장점: 객체지향 원칙 중 개방 폐쇄 원칙(OCP)을 적용할 수 있다.
  • 단점: 패토리 메서드 패턴을 적용하기 전보다 클래스의 수가 많아진다. 하지만 클래스별로 단일 책임의 관점에서는 오히려 책임 분리가 되기 때문에 큰 문제가 되지 않는다고 생각한다.

“확장에 열려있고 변경에 닫혀있는 객체 지향 원칙”을 설명하세요.

  • “확장에 열려 있다”는 의미는 새로운 변경사항이 생겼을 때 유연하게 코드를 추가, 수정할 수 있다는 것이다.
  • “변경에 닫혀있다”는 의미는 새로운 변경사항에 의해서 기존의 코드에 변경이 일어나지 않는다는 것이다.

자바 8에 추가된 default 메소드에 대해 설명하세요.

  • 자바 7까지는 인터페이스에 메서드 정의만 할 수 있고 구현은 할 수 없었으나, 자바 8부터 인터페이스에 메서드를 구현까지 할 수 있는 default 메서드 개념이 추가되었다.
  • 자바 9부터는 인터페이스에 private 메서드를 구현할 수 있는 기능까지 추가되었다.

실무 적용 사례

단순한 팩토리 패턴

  • 매개변수의 값에 따라 또는 메소드에 따라 각기 다른 인스턴스를 리턴하는 단순한 버전의 팩토리 패턴
  • java.lang.Calendar 또는 java.lang.NumberFormat

스프링 BeanFactory

  • Object 타입의 Product를 만드는 BeanFacotry라는 Creator

예제 코드

https://github.com/jsyang-dev/study-designpattern/tree/master/src/main/java/me/study/designpattern/factorymethod

'GoF의 디자인 패턴' 카테고리의 다른 글

어댑터(Adapter) 패턴  (0) 2022.01.13
프로토타입(Prototype) 패턴  (0) 2022.01.10
빌더(Builder) 패턴  (0) 2022.01.08
추상 팩토리 패턴  (0) 2022.01.06
싱글톤(Singleton) 패턴  (0) 2021.12.29

댓글