Note

[디자인패턴] Factory Pattern - 팩토리 패턴

Supreme_YS 2021. 12. 16. 12:00

팩토리 패턴은 말 그대로 공장이다. 공장은 무엇을 하는가를 생각해보면 조금 이해가 쉽다. 공장은 무언가를 생성하는 곳이고, 그것을 대량으로 찍어내기도 한다. 핵심 키워드를 조금 더 좁혀본다면, 생성과 찍어내기이다. 그래서 학문적으로 팩토리 패턴은 어떤 상황에서 조건에 따라 객체를 다르게 생성해야 할 때, 분기에 따른 객체의 생성을 직접하지 않고, 팩토리 라는 클래스에 위임해서 이를 처리하게 한다. 라고 적혀있다. 역시, 학문적인 접근은 굉장히 투박한 것 같다. 역시 추상화를 적용해보자.

 

색칠 공부를 하려고 한다. 색칠 공부를 하기 위해선 스케치만 되어있는 밑 그림이 필요하다. 이러한 밑 그림을 개인이 그리고 색칠까지 하려면 굉장히 많은 프로세스를 본인이 부담하게 된다. 따라서, 밑 그림을 다양하게 제공하는 색칠 공부 책을 사서 우리는 색칠만 하면 된다. 이러한 사용자가 원하는 밑 그림이 그려진 색칠 공부 책을 제공하는 것이 팩토리 패턴이다. 

 

발로 그린 팩토리 패턴

이를 코드로 나타내면 다음과 같다

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. 객체간의 결합도를 낮춤으로써 유지보수가 용이해진다.