[typescript] 동일한 인터페이스를 가진 여러 객체를 생성하는 추상 팩토리 패턴과 타입스크립트의 결합 사례

추상 팩토리 패턴은 객체 생성을 추상화하여 관련 객체군을 생성하기 위한 인터페이스를 제공하는 디자인 패턴입니다. 이 패턴은 동일한 인터페이스를 가진 여러 객체를 생성하고 클라이언트에 대해 구체적인 클래스를 지정하지 않도록 합니다. 타입스크립트를 사용하여 추상 팩토리 패턴을 구현하는 방법을 살펴보겠습니다.

추상 팩토리 인터페이스 정의

우선, 추상 팩토리 패턴을 구현하기 위해 인터페이스를 정의합니다. 다음은 ShapeColor를 생성하기 위한 추상 팩토리 인터페이스의 예시입니다.

interface Shape {
    draw(): void;
}

interface Color {
    fill(): void;
}

interface AbstractFactory {
    createShape(): Shape;
    createColor(): Color;
}

구체적인 팩토리 클래스 구현

이제 추상 팩토리를 구현하는 구체적인 팩토리 클래스를 정의합니다. 예를 들어, RectangleRed를 생성하기 위한 구체적인 팩토리 클래스를 구현할 수 있습니다.

class Rectangle implements Shape {
    draw() {
        console.log("Inside Rectangle::draw() method.");
    }
}

class Red implements Color {
    fill() {
        console.log("Inside Red::fill() method.");
    }
}

class RectangleFactory implements AbstractFactory {
    createShape(): Shape {
        return new Rectangle();
    }

    createColor(): Color {
        return new Red();
    }
}

클라이언트 코드 작성

마지막으로, 구체적인 팩토리 클래스를 사용하여 객체를 생성하는 클라이언트 코드를 작성합니다.

function clientCode(factory: AbstractFactory) {
    const shape = factory.createShape();
    const color = factory.createColor();

    shape.draw();
    color.fill();
}

// 사용 예시
clientCode(new RectangleFactory());

위와 같이 타입스크립트를 활용하여 추상 팩토리 패턴을 구현할 수 있습니다. 이는 유연한 객체 생성 및 타입 안정성을 제공하여 애플리케이션의 유지보수성을 향상시킬 수 있는 패턴입니다.

참고 자료