[typescript] 객체 생성 및 관리에 사용되는 추상 팩토리와 타입스크립트의 결합 사례

추상 팩토리는 객체 생성 로직을 추상화하여 클라이언트에게 구체적인 클래스를 알지 않고도 관련 객체를 생성할 수 있는 디자인 패턴입니다. TypeScript는 이러한 디자인 패턴을 구현하는 데 적합한 강력한 기능을 제공합니다.

이 포스트에서는 TypeScript에서 추상 팩토리를 어떻게 구현하는지에 대해 살펴볼 것입니다.

추상 팩토리 디자인 패턴

추상 팩토리 디자인 패턴은 관련된 객체들을 특정한 구현체와 관계 없이 생성할 수 있도록 하는 객체 생성 패턴입니다. 이 패턴은 인터페이스를 통해 서브 클래스의 생성을 캡슐화하고 클라이언트가 생성해야 하는 구체 클래스의 이름을 알 필요가 없도록 합니다.

타입스크립트에서의 추상 팩토리 구현

타입스크립트에서 추상 팩토리를 구현하려면 먼저 관련된 객체들의 공통 인터페이스를 정의해야 합니다. 이후에 각각의 구체적인 팩토리를 구현하여 이 인터페이스에 정의된 메서드를 구체적으로 구현합니다.

다음은 추상 팩토리 디자인 패턴을 타입스크립트로 구현한 간단한 예제입니다:

interface Shape {
  draw(): void;
}

class Circle implements Shape {
  draw() {
    console.log("Circle.draw");
  }
}

class Square implements Shape {
  draw() {
    console.log("Square.draw");
  }
}

interface ShapeFactory {
  createShape(): Shape;
}

class CircleFactory implements ShapeFactory {
  createShape() {
    return new Circle();
  }
}

class SquareFactory implements ShapeFactory {
  createShape() {
    return new Square();
  }
}

// 클라이언트 코드
const circleFactory: ShapeFactory = new CircleFactory();
const squareFactory: ShapeFactory = new SquareFactory();

const circle: Shape = circleFactory.createShape();
const square: Shape = squareFactory.createShape();

circle.draw(); // "Circle.draw"
square.draw(); // "Square.draw"

위 예제에서 Shape는 추상화된 모양을 나타내는 인터페이스이고, CircleSquare는 이를 구현하는 구체 클래스입니다. 또한 ShapeFactory는 모양을 생성하는 팩토리의 인터페이스이며, CircleFactorySquareFactory는 각각의 구현체입니다.

결론

타입스크립트의 강력한 타입 시스템과 객체 지향적인 특성을 이용하면 추상 팩토리 디자인 패턴을 구현하고 활용하는 것이 매우 용이합니다. 이를 통해 느슨한 결합과 유연성을 유지하면서 객체 생성과 관리를 쉽게 할 수 있습니다.