[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
는 추상화된 모양을 나타내는 인터페이스이고, Circle
과 Square
는 이를 구현하는 구체 클래스입니다. 또한 ShapeFactory
는 모양을 생성하는 팩토리의 인터페이스이며, CircleFactory
와 SquareFactory
는 각각의 구현체입니다.
결론
타입스크립트의 강력한 타입 시스템과 객체 지향적인 특성을 이용하면 추상 팩토리 디자인 패턴을 구현하고 활용하는 것이 매우 용이합니다. 이를 통해 느슨한 결합과 유연성을 유지하면서 객체 생성과 관리를 쉽게 할 수 있습니다.