[생성패턴]팩토리 메소드 패턴(Factory Method Pattern) & 추상 팩토리 패턴(Abstract Factory Pattern)

seyeong oh·2022년 12월 2일

JAVA

목록 보기
4/6

팩토리 메소드패턴이란?

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

  • 팩토리 패턴에서는 클래스의 인스턴스를 만드는 시점을 서브 클래스로 미룹니다.

JAVA Example

팩토리 패턴에 사용되는 슈퍼클래스는 인터페이스나 추상 클래스, 혹은 그냥 평범한 자바 클래스여도 상관없다.
상위 슈퍼클래스를 만들고 PC와 Server라는 두 서브 클래스를 생성하여 상속을 받는다.
팩토리 클래스를 만든다.
팩토리 클래스의 역할은 type이 PC일 경우에는 PC클래스의 인스턴스를, Server일 때는 서버 클래스의 인스턴스를 리턴한다.
다시말해 파라미터를 필터링하여 그에 맞는 인스턴스를 리턴해 준다는 것이다.
이렇게 팩토리 메소드 패턴을 사용하게 되면 인스턴스를 필요로 하는 어플리케이션에서 컴퓨터의 sub클래스에 대한 정보는 모른 채 인스턴스를 생성할 수 있게 된다.

  • Factory Class를 싱글톤으로 구현해도 되고, 서브클래스를 리턴하는 static 메소드로 구현해도 된다.

팩토리 패턴의 장단점

장점 : 개방 폐쇠 원칙을 잘 따르며 변경해야 할 부분과 변경하면 안될부분을 명확하게 나눌 수 있다.
단점 : 패턴을 구현할 많은 서브 클래스를 도입함으로써 코드가 복잡해 질 수 있다.

추상 팩토리 패턴이란?

  • 팩토리 메소드 패턴에서는 하나의 팩토리 클래스가 인풋되는 파라미터의 값을 if-else문을 이용하여 구분한 뒤 서브클래스를 리턴하는 방식이었다면 추상 팩토리 패턴은 서브 클래스마다 해당 팩토리를 만들어 관라합니다.
  • 추상 팩토리 패턴에서는 인풋으로 서블클래스의 대한 식별 데이터를 받는 것이 아니라 또 하나의 팩토리 클래스를 받는다.


실행 코드

public class Main {

	
	public static void main(String[] args) {
		Computer pc = ComputerFactory.getComputer(new PCFactory("2 GB","500 GB","2.4 GHz"));
		Computer server = ComputerFactory.getComputer(new ServerFactory("16 GB","1 TB","2.9 GHz"));
		System.out.println("AbstractFactory PC Config::"+pc);
		System.out.println("AbstractFactory Server Config::"+server);                                                                      
	}
}

팩토리 패턴의 장단점

추상 팩토리 패턴
장점 : 개방 폐쇠 원칙을 잘 따르며 변경해야 할 부분과 변경하면 안될부분을 명확하게 나눌 수 있다.
단점 : 패턴을 구현할 많은 서브 클래스를 도입함으로써 코드가 복잡해 질 수 있다.

0개의 댓글