프런트엔드/디자인 패턴

[1일차] 추상 팩토리 | 생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴

조드래곤나인 2023. 7. 16. 14:39

 

출처: 에릭 감마 , 리처드 헬름 , 랄프 존슨 , 존 블리시디스. 『Gof의 디자인 패턴』. 김정아(역). 프로텍미디어, 2015.

 

 

[1일차] 추상 팩토리(Abstract Factory)
생성 패턴 5일만에 끝내기 챌린지 - GoF 디자인 패턴

타입스크립트로 설명하는 GoF 디자인 패턴의 생성 패턴 5일만에 끝내기 챌린지

 

 

추상 팩토리란?

구체적인 클래스를 지정하지 않고
관련성을 갖는 객체들의 집합을 생성하거나
서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공하는 패턴

 

 

활용성

1) 여러 제품군 중 하나를 선택해서 시스템을 설정해야 하고
한번 구성한 제품을 다른 것으로 대체할 수 있을 때

2) 관련된 제품 객체들이 함께 사용 되도록 설계되었고,

이 부분에 대한 제약이 외부에도 지켜지도록 하고 싶을 때

 

3) 제품에 대한 클래스 라이브러리를 제공하고,

그들의 구현이 아닌 인터페이스를 드러내고 싶을 때

 

 

구조 및 구현

interface AbstractFactory {
    createProductA(): AbstractProductA
    createProductB(): AbstractProductB
}

class ConcreteFactory1 implements AbstractFactory {
    createProductA() {
        return new ProductA1()
    }
    createProductB() {
        return new ProductB1()
    }
}

class ConcreteFactory2 implements AbstractFactory {
    createProductA() {
        return new ProductA2()
    }
    createProductB() {
        return new ProductB2()
    }
}

interface AbstractProductA { }
interface AbstractProductB { }

class ProductA1 implements AbstractProductA {}
class ProductA2 implements AbstractProductA {}

class ProductB1 implements AbstractProductB {}
class ProductB2 implements AbstractProductB {}
 
class Main {
    factory: AbstractFactory
    constructor() {
        this.factory = new ConcreteFactory1()
        this.factory.createProductA()
        this.factory.createProductB()
    }
}

// 다른 제품을 사용할 때
class Main {
    factory: AbstractFactory
    constructor() {
        this.factory = new ConcreteFactory2()
        this.factory.createProductA()
        this.factory.createProductB()
    }
}
 

ConcreteFactory 클래스의 인스턴스 한 개가 런타임에 만들어진다.

ConcreteFactory는 어떤 특정 구현을 갖는 제품 객체를 생성한다.

서로 다른 제품을 생성하려면 서로 다른 ConcreteFactory를 사용해야 한다.


 

 

공식 기술블로그 링크

 

더넥스트웹리서치랩

웹 클라이언트 기술을 전문적으로 연구하고 자료를 발행하는 기술 블로그를 운영합니다.

the-next-web-research-lab.github.io

 

728x90