Design Pattern

Abstract Factory Pattern

비비이잉 2022. 4. 21. 11:24
반응형

비슷한 기능을 하지만 종류가 다른 클래스들을 생성하는 인터페이스 제공

 

 첫 번째, 추상 제품 인터페이스(추상클래스도 가능) : 제품에 대한 추상적 인터페이스 제공

▷ 두 번째, 구현 제품 클래스 : 팩토리가 생성할 구체적인 제품

▷ 세 번째, 추상 팩토리 인터페이스(추상클래스도 가능) : 추상 제품을 생산하는 인터페이스 제공

▷ 네 번째, 구현 팩토리 클래스 : 구현된 제품을 생산하는 방법 구현

 

 

 

 

기타 공장에서 통기타, 일렉기타 등 여러 종류의 기타를 만든다고 했을 때 

 

[추상 제품 인터페이스]

// 기타의 몸통을 뜻하는 추상 제품 인터페이스
public interface IBody
{
    ...
}

// 기타의 현을 뜻하는 추상 제품 인터페이스
public interface IString
{
    ...
}

 

기타의 몸통 (Body), 현(String)을 뜻하는 기타를 만들기 위해 필요한 부품을 인터페이스로 표현 

 

[구현 제품 클래스]

 

팩토리에서 생산할 제품을 정의했다 

public class AcousticBody : IBody
{
    ...
}

public class ElectricBody : IBody
{
    ...
}

public class AcousticString : IString
{
    ...
}

public class ElectricString : IString
{
    ...
}

 

[팩토리 인터페이스]

제품을 생산할 팩토리 (공장)정의 

여러 구현 팩토리 클래스에서 필수 공통적으로 재정의할 함수 선언 

이렇게 되면, 구체적으로 어떤 제품을 생산할 지는 알 수 없지만, 어떤 속성의 제품을 생산할 지는 대략적으로 유추할 수 있다. (CreateBody를 통해 몸통을 생산하면 AcousticBody인지 ElectricBody인지는 알 수 없어도 IBody 타입이라는 것은 알 수 있다는 뜻)

public interface IGuitarFactory
{
    IBody CreateBody();

    IString CreateString();
}
//통기타를 만드는 공장인지 ? 일렉기타를 만드는 공장인지 ? 
//어떤 종류의 기타던 몸통과 현이 필요하기 때문에 CreateBody와 CreateString함수를 정의해줌

[구현 팩토리 클래스]

각각 통기타와 일렉기타를 생산하는 것으로 공통 인터페이스를 상속 받지만 구체적인 내용은 커스텀이 가능하다 

// 통기타를 생산하는 내용을 정의한 구현 팩토리 클래스
public class AcousticGuitarFactory : IGuitarFactory
{
    public IBody CreateBody()
    {
         return new AcousticBody();
    }

    public IString CreateString()
    {
        return new AcousticString();
    }
}

// 일렉기타를 생산하는 내용을 정의한 구현 팩토리 클래스
public class ElectricGuitarFactory : IGuitarFactory
{
    public IBody CreateBody()
    {
         return new ElectricBody();
    }

    public IString CreateString()
    {
        return new ElectricString();
    }
}

 

 

 

결론 : 어떤 팩토리를 통해 기타를 생산하던지, 공통 타입인 IBody 나 IString이 만들어진다 

 

장점 

1. 구체적인 클래스를 사용자로부터 분리 : 사용자는 생산되는 인터페이스만 알고있어도됨

2. 비슷한 속성의 객체 (같은 추상 제품을 상속받은 객체)들을 쉽게 대체하거나 교체할 수 있음.

3. 객체 과정에서의 일관성이 높아짐

 

 

단점

1. 수정이 불편하다

: 새로운 제품클래스를 추가하게 된다면 기존의 추상 팩토리를 확장하기가 쉽지 않다.  추상 팩토리를 상속하고있는 모든 팩토리에도 새로운 제품에 대한 구현방법이 수정되어야하기 때문이다. 

 

 

 

 

https://spiralmoon.tistory.com/m/entry/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EC%B6%94%EC%83%81-%ED%8C%A9%ED%86%A0%EB%A6%AC-%ED%8C%A8%ED%84%B4-Abstract-factory-pattern

 

[디자인 패턴] 추상 팩토리 패턴 (Abstract factory pattern)

▶  주제 : 추상 팩토리 패턴 (Abstract factory pattern). 생성 패턴의 하나. 비슷한 속성의 제품(객체)들을 인터페이스로 규격화된 공정(팩토리)에서 일관된 방식으로 생성하고, 생성된 제품끼리는 쉽

spiralmoon.tistory.com

 

반응형

'Design Pattern' 카테고리의 다른 글

[Design Pattern] 데코레이터 패턴  (0) 2022.06.22
Adapter Pattern  (0) 2022.06.09