팩토리 패턴

- 객체의 생성을 캡슐화 하는 패턴

- 구체적인 객체의 생성과정을 '팩토리'로 모듈화해 구체적인 부분이 아닌 추상적인 부분에 의존하게 하여 의존 역전의 원칙(DIP)를 활용한다.

- 대표적으로 팩토리 메소드 패턴과 추상 팩토리 패턴이 존재한다.

 

종류 공통점 차이점
팩토리 메소드 패턴 객체의 생성부를 캡슐화해 느슨한 결합
구체가 아닌 추상적인 타입에 의존하게 함(DIP)
상속 통해 서브 클래스에서 팩토리 메소드를 오버라이딩해 객체 생성부 구현
추상 팩토리 패턴 객체의 집합을 생성을 위하 정의를 추상체에 선언하고 하위 구현체에서 세부적인 집합 생성 과정을 구현 (factory method 이용해 구현)

 

 

팩토리 메소드 패턴이란?

상위 클래스가 구체 클래스에 대한 정보 없이 구체 클래스를 생성하게 하는 패턴으로, 하위 클래스가 어떤 객체를 생성할 지 결정하게 한다. 하위 클래스에서 팩토리 메서드를 오버라이딩해 객체를 반환하게 하는 패턴

 

  • 팩토리 메소드란?

객체 생성을 반환하는 메서드

 

  • 사용이유 

- 생성할 객체 타입을 예측할 수 없을때

- 생성 객체 기술 책임을 서브클래스에게 정의하고자 할대 (의존성 제거)

- 객체 생성 책임을 서브클래스에 위임하고 서브클래스에 대한 정보를 은닉할 때

 

  • 장점

- 기존 코드(인스턴스 만드는 과정)를 수정하지 않고 새로운 인스턴스를 다른방법으로 생성하도록 확장

- 병렬적 클래스 계층도를 연결하는 역할을 담당할 수 있음

 

  • 단점

- 클래스가 많아져 클래스 계층도 커진다.

 

 

 

 

 

예시 - 항해를 누가 수료할 지 모를때

  • 수료자 관한 클래스들

수료자 클래스

public abstract class HangHaeGraduate {	// 항해 수료자 클래스
	public abstrack String getPostScrpit();	// 항해 후기 
}

 

수료자 A

public class ES extends HangHaeGraduate {
    @Override
    public String getPostScript() {
    	return "안녕히계세요 여러분~ 전 이 세상의 모든 굴레와 속박을 벗어던지고 제 행복을 찾아 떠납니다";
    }
}

 

수료자 B

public class KR extends HangHaeGraduate {
    @Override
    public String getPostScript() {
    	return "더러웠고 다신 보지 말자";
    }
}

 

수료자 C

public class SY extends HangHaeGraduate {
    @Override
    public String getPostScript() {
    	return "@#$ㅃ#$ㅃ$%^ㄸㄲㅉ!@@#@$!";
    }
}

 

  • 수료식 관한 클래스들 (팩토리 클래스)

수료식 예정 

public abstract class HangHaeFinal {
	abstract HangHaeGraduate graduate(HangHaeGraduate hhg);
}
public abstract class HangHaeFinal10th extends HangHaeFinal {
    @Override
    abstract HangHaeGraduate graduate(String graduateName ){
    	swich(graduateName) {
            case "KR" :
            	return new KR();
            case "ES" :
                return new ES();
            case "SY" :
                return new SY();
        }
    };
}

 

  • Main
public class Main {
	public static void main(String[] args){
    	HangHaeFinal hhf = new HangHaeFinal();
        
        String[] graduateList = {"KR","ES"};
        
        for(String graduate : graduateList){
            HangHaeGraduate graduateOne = hhf.graduate(graduate);
            system.out.println(graduateOne.getPostScript());
        } 
    }
}

// 더러웠고 다신 보지말자
// 안녕히계세요 여러분~ 전 이 세상의 굴레와 속박을 벗어던지고 제 행복을 찾아 떠납니다

 

 

 

 

 

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

1. 팩토리 메소드 패턴이란? 다양한 구현체 (Product)가 있고, 그 중에서 특정한 구현체를 만들 수 있는 다양한 팩토리(Creator)를 제공할 수 있다. 1-1. 정의(Definition) 1-1-1. 팩토리 패턴? 객체의 생성을

dev-youngjun.tistory.com

 

'Computer Science > Design Pattern' 카테고리의 다른 글

CQRS 패턴  (0) 2023.02.07

+ Recent posts