팩토리 패턴
- 객체의 생성을 캡슐화 하는 패턴
- 구체적인 객체의 생성과정을 '팩토리'로 모듈화해 구체적인 부분이 아닌 추상적인 부분에 의존하게 하여 의존 역전의 원칙(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 |
|---|
