
팩토리 메서드 패턴 정리
DesignPattern
2025.10.17.
팩토리 메소드 패턴
1. 패턴 소개
구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다.
- 다양한 구현체(Product)가 있고, 그중에서 특정한 구현체(creator)를 만들 수 있는 다양한 팩토리를 제공할 수 있다.
2. 패턴 적용하기, 3. 인터페이스 적용하기
팩토리 메소드 패턴의 목적은 변경에는 닫혀있고, 확장에는 열려있는 구조를 만드는 것
즉, OCP 원칙을 지키기 위한 패턴에 가깝다.
- 클라이언트 코드는 바뀔 수 있지 않냐?
- 기존 product와 factory가 변경되지 않는다.
코드 작성 팁 정리
- Factory를 interface로 구현
- 배를 직접적으로 생성시키는 메소드만 추상 메소드로 정의
- 배를 만들어 반환하는 메서드를 구현하는 구현체를 각각 책임에 맞게 정의
- 클라이언트에서 해당하는 구현체를 선택
4. 장점과 단점
- 팩토리 메소드 패턴을 적용했을 때의 장, 단점
- 장점
- 요구사항의 변경에도 기존코드를 변경하지 않고 확장하여 처리할 수 있는 보기좋은 구조가 된다.
- 생성자(Creator)와 구현 객체(concrete product)의 강한 결합을 피함
- 팩토리 메서드를 통해 객체의 생성 후 공통으로 할 일을 수행하도록 지정 가능
- 캡슐화, 추상화를 통해 생성되는 객체의 구체적인 타입을 감출수 있다.
- 단일 책임 원칙 준수 : 객체 생성 코드를 한 곳(패키지, 클래스 등) 으로 이동하여 코드를 유지보수하기 쉽게 하기에
- 개방 / 폐쇄 원칙 준수 : 기존 코드를 수정하지 않고 새로운 유형의 제품 인스턴스를 프로그램에 도입할 수 있어 원칙을 만족 (확장성 있는 전체 프로젝트 구성이 가능)
- 단점
- 각자의 역할을 나누다 보니 클래스가 증가한다.
- 장점
다음을 직접 설명해라
1. “확장에 열려있고 변경에 닫혀있는 객체 지향 원칙”(OCP)을 설명하세요.
-> 변경에 닫혀있다. -> 기존 코드를 변경하지 않는다.
-> 확장에 열려있다. -> 새로운 기능을 확장할 수 있다.
2. 자바 8에 추가된 default 메소드에 대해 설명하세요.
-> 인터페이스에서 기본적인 구현체를 만들 수 있다. (이전에는 추상 메서드만 만들 수 있었다.)
-> 자바 9에서는 private 메서드를 정의할 수 있다.
패턴 사용 시기
5. 자바와 스프링에서 찾아보는 패턴
- 단순한 팩토리 패턴
- 매개변수의 값에 따라 또는 메소드에 따라 각기 다른 인스턴스를 리턴하는 단순한 버전의 팩토리 메서드 패턴
- ex - java.lang.Calendar 또는 java.lang.NumberFormat
- Calendar는 Gregorian 형식 Julian 형식이 있는데, 이 두가지 경우를 모두 커버하기 위해 팩토리 메소드 패턴으로 디자인 되었다.
- 국가 또는 화폐에 따라 다른 표현 방식을 커버하기 위해 팩토리 메소드 패턴으로 디자인
- NumberFormat을 구현하는 클래스는 DecimalFormat, ExponentialFormat 등
- 스프링의 BeanFactory
- Object타입의 Product를 만드는 BeanFactory라는 Creator