Java/고급객체지향

고급객체지향 프로그래밍 - 팩토리 메소드 패턴(Factory Method Pattern)

얄루몬 2021. 10. 19. 14:08

팩토리 메소드 패턴(Factory Method Pattern)

 

팩토리메소드란? 

Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.

 

팩토리메소드의 목적

- 바뀌는 부분/ 바뀌지 않는 부분을 나누어서 바뀌는 부분을 추상 클래스로 만들어준다.

- 관련된 팩토리 메소드 함수들이 여러개를 한 꺼번에 묶어 놓은 그런 클래스를 만들어 제공하는 것이 핵심이다.

- 구체적인 클래스 명시 없이 관련된 혹은 의존적인 객체를 생성할 수 있는 인터페이스를 제공한다.

 

문제점

- 객체를 생성하는 new의 문제로 new는 인터페이스가 아닌 실제 클래스(concrete class)의 객체를 생성하는 것이다.

 

 

팩토리 메소드, 추상 팩토리의 요소

요소 설명
이름 팩토리 메소드(Factory method),
추상 팩토리(Abstract method)
문제 실제로 구현되는 클래스의 객체를 생성할 때 객체의 종류가 달라지면 클라이언트 코드를 수정해야 하는 것이 너무 많아진다.
해결 방안 생성을 분리해서 캡슐화 시킨다
결과 사용할 객체가 많거나 객체를 생성하는 방법이 변경되어도 연쇄적인 수정이 적어진다.

 

 

팩토리 메소드 패턴의 전체적인 구조

출처: https://t1.daumcdn.net/cfile/tistory/9999D8385BE5725009

 

추상 클래스를 가지고 클래스 구현을 하는 이유는?

- 추상함수를 가지고 있어서가 아닌 클래스 자체만으로는 객체를 만들 수 없게 하기 위함이다.

- 즉 Creator에서 클래스 자체만으로 객체를 만들지 못하게 하고 서브 클래스인 ConcreteCreator에게 그 역할을 맡기는 것이 추상 클래스를 이용해 클래스를 구현하는 이유다. 

 

 

추상 팩토리 패턴(Abstract Factory Pattern) 

- 추상 팩토리를 통해서 제품군을 생성하기 위한 인터페이스를 제공할 수 있다.

 

추상 팩토리 패턴이란?

추상 팩토리 패턴(Abstract factory pattern)은 다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용하다. 이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다.

출처: https://ko.wikipedia.org/wiki/%EC%B6%94%EC%83%81_%ED%8C%A9%ED%86%A0%EB%A6%AC_%ED%8C%A8%ED%84%B4

 

 

출처ㅣ https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlOmOK%2FbtqwzzrPqVA%2FNRH5b1B0MsAU9kkuNIyiN0%2Fimg.png

 

- 팩토리 메소드 패턴과 추상 팩토리 패턴은 엄연히 다른 패턴으로 둘은 비슷하지만 조금 다르다.