Book/면접을 위한 CS 전공지식 노트

면접을 위한 CS 전공지식 노트 - 팩토리 패턴

muggle-coder 2023. 9. 17. 14:53
728x90

팩토리 패턴(Factory pattern)

객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자,

상속관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

장점

  • 느슨한 결합
  • 상위클래스에서는 인스턴스 생성 방식에 대해 알필요가 없기 때문에 많은 유연성을 갖게 된다.
  • 객체 생성 로직이 독립적이기 때문에 코드를 리팩터링하기 용이하여, 유지 보수성이 증가된다.

자바에서의 팩토리 패턴

 

enum CoffeeType {
    LATTE,
    ESPRESSO
}

abstract class Coffee {
    protected String name;

    public String getName() {
        return name;
    }
}

class Latte extends Coffee {
    public Latte() {
        name = "latte";
    }
}

class Espresso extends Coffee {
    public Espresso() {
        name = "Espresso";
    }
}

class CoffeeFactory {
    public static Coffee createCoffee(CoffeeType type) {
        switch (type) {
            case LATTE:
                return new Latte();
            case ESPRESSO:
                return new Espresso();
            default:
                throw new IllegalArgumentException("Invalid coffee type: " + type);
        }
    }
}

public class Main {
    public static void main(String[] args) { 
        Coffee coffee = CoffeeFactory.createCoffee(CoffeeType.LATTE); 
        System.out.println(coffee.getName()); // latte
    }
}

 

Enum

상수의 집합을 정의할 때 사용되는 타입이다. 상수나 메서드 등을 집어넣어 관리하며 코드를 리팩터링할 때 해당 집합에 관한 로직 수정 시 이 부분만 수정하면 되므로 코드 리팩터링 시 강점이 생긴다.