팩토리 패턴은 말 그대로 공장이다. 공장은 무엇을 하는가를 생각해보면 조금 이해가 쉽다. 공장은 무언가를 생성하는 곳이고, 그것을 대량으로 찍어내기도 한다. 핵심 키워드를 조금 더 좁혀본다면, 생성과 찍어내기이다. 그래서 학문적으로 팩토리 패턴은 어떤 상황에서 조건에 따라 객체를 다르게 생성해야 할 때, 분기에 따른 객체의 생성을 직접하지 않고, 팩토리 라는 클래스에 위임해서 이를 처리하게 한다. 라고 적혀있다. 역시, 학문적인 접근은 굉장히 투박한 것 같다. 역시 추상화를 적용해보자.
색칠 공부를 하려고 한다. 색칠 공부를 하기 위해선 스케치만 되어있는 밑 그림이 필요하다. 이러한 밑 그림을 개인이 그리고 색칠까지 하려면 굉장히 많은 프로세스를 본인이 부담하게 된다. 따라서, 밑 그림을 다양하게 제공하는 색칠 공부 책을 사서 우리는 색칠만 하면 된다. 이러한 사용자가 원하는 밑 그림이 그려진 색칠 공부 책을 제공하는 것이 팩토리 패턴이다.
이를 코드로 나타내면 다음과 같다
package DesignPattern.FactoryMethod;
// 추상 메서드 정의
public abstract class Type {
}
package DesignPattern.FactoryMethod;
// 추상메서드를 정의함 -> 색칠 방법 A
public class TypeA extends Type {
public TypeA() {
System.out.println("Type A 생성");
}
}
package DesignPattern.FactoryMethod;
// 추상메서드를 정의함 -> 색칠 방법 B
public class TypeB extends Type {
public TypeB() {
System.out.println("Type B 생성");
}
}
package DesignPattern.FactoryMethod;
// 공장에서 타입에 맞는 그림책을 생성만 해주고 리턴
public class TypeFactory {
public Type createType(String type) {
Type returnType = null;
switch (type) {
case "A":
returnType = new TypeA();
break;
case "B":
returnType = new TypeB();
break;
}
return returnType;
}
}
package DesignPattern.FactoryMethod;
public class ClassA {
public Type createType(String type) {
TypeFactory factory = new TypeFactory(); // 팩토리에서 그림책 생성
Type returnType = factory.createType(type); // 밑 그림(type)을 넣고 공장에서 생성해서 받음
return returnType;
}
}
팩토리 메서드는 왜 쓰는가 ?
1. 객체간의 결합도를 낮추기 위함. -> 혼자서 밑 그림그리고 색칠까지 다하려면 빡셈
2. 객체간의 결합도를 낮춤으로써 유지보수가 용이해진다.
'Note' 카테고리의 다른 글
[디자인패턴] Decorator Pattern - 데코레이터 패턴 (0) | 2021.12.18 |
---|---|
[디자인패턴] Composite Pattern - 복합체 패턴 (0) | 2021.12.17 |
[디자인패턴] Proxy Pattern - 프록시 패턴 (0) | 2021.12.15 |
[디자인패턴] Template Method Pattern - 템플릿 메서드 패턴 (0) | 2021.12.08 |
[MacOS] 응용프로그램을 열 수 있는 권한이 없습니다. (0) | 2021.10.22 |