Ian's Archive 🏃🏻

thumbnail
팩토리 메서드 패턴 정리
DesignPattern
2025.10.17.

팩토리 메소드 패턴

1. 패턴 소개

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

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

2

2. 패턴 적용하기, 3. 인터페이스 적용하기

팩토리 메소드 패턴의 목적은 변경에는 닫혀있고, 확장에는 열려있는 구조를 만드는 것

즉, OCP 원칙을 지키기 위한 패턴에 가깝다.

  • 클라이언트 코드는 바뀔 수 있지 않냐?
    • 기존 product와 factory가 변경되지 않는다.

1

작성한 코드

코드 작성 팁 정리

  1. Factory를 interface로 구현
  • 배를 직접적으로 생성시키는 메소드만 추상 메소드로 정의
  1. 배를 만들어 반환하는 메서드를 구현하는 구현체를 각각 책임에 맞게 정의
  2. 클라이언트에서 해당하는 구현체를 선택

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

Reference

코딩으로 학습하는 GoF의 디자인 패턴 - 백기선

Thank You for Visiting My Blog, I hope you have an amazing day 😆
© 2023 Ian, Powered By Gatsby.