[cs 스터디] 1-1. 디자인 패턴 - 팩토리 패턴

YooJeeun·2024년 12월 26일

cs 스터디

목록 보기
2/65

팩토리 패턴(factory pattern)

객체 생성 로직을 사용하는 코드와 분리하여 유연성과 재사용성을 높이는 객체 생성 패턴.
이를 통해 코드의 결합도를 낮추고 유지보수와 확장이 용이해진다.

팩토리 패턴의 주요 특징

1. 객체 생성의 추상화
  • 객체를 생성하는 로직(구현 세부 사항)을 상위 클래스나 별도의 "팩토리"클래스에 위임
  • 객체를 사용하는 코드는 구체적인 객체 생성 방식에 대해 알 필요 없이 추상화된 인터페이스나 부모 클래스 객체를 다룬다.
2. 상속 관계
  • 상위 클래스는 객체 생성의 뼈대(공통된 인터페이스)를 정의
  • 하위 클래스는 객체 생성에 대한 구체적인 구현을 제공
    이로 인해 상위 클래스는 구체적인 하위 클래스에 대한 의존 없이 동작 가능
3. 유연성과 유지보수성
  • 객체 생성 로직이 분리되어, 새로운 객체를 추가하거나 생성 방식을 변경할 때도한곳만 수정하면 된다.
  • 코드의 수정 범위가 좁아져 유지보수성이 높아짐.

팩토리 패턴 미사용

class Latte {
    constructor() {
        this.name = "Latte";
    }
}

class Americano {
    constructor() {
        this.name = "Americano";
    }
}

// 사용하는 코드
const latte = new Latte();
const americano = new Americano();

console.log(latte.name);      // Latte
console.log(americano.name);  // Americano

Latte와 Americano 객체를 생성할 때 사용하는 코드가 직접 객체를 생성한다.
새로운 음료 클래스를 추가하거나 변경할경우 객체를 사용하는 모든 코드를 수정해야 한다.

팩토리 패턴 사용

// 추상화된 상위 클래스 (부모 클래스)
class Coffee {
    constructor(name) {
        this.name = name;
    }
}

// 구체적인 하위 클래스
class Latte extends Coffee {
    constructor() {
        super("Latte");
    }
}

class Americano extends Coffee {
    constructor() {
        super("Americano");
    }
}

// 팩토리 클래스
class CoffeeFactory {
    static createCoffee(type) {
        switch (type) {
            case "Latte":
                return new Latte();
            case "Americano":
                return new Americano();
            default:
                throw new Error("Invalid coffee type");
        }
    }
}

// 사용하는 코드
const latte = CoffeeFactory.createCoffee("Latte");
const americano = CoffeeFactory.createCoffee("Americano");

console.log(latte.name);      // Latte
console.log(americano.name);  // Americano

객체 생성 로직이 CoffeeFactory 클래스에 모여 있어, 사용하는 코드에서 객체 생성 방식을 알 필요가 없다.
새로운 음료를 추가하려면 팩토리 클래스만 수정하면 된다.

profile
제니벨로그

0개의 댓글