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

❓추상 팩토리 패턴?

추상 팩토리 패턴은, 팩토리 메서드 패턴에서 한 층 더 나아가, 팩토리 그룹, 객체 패밀리 (object families)를 만들어 확장해 나가는 패턴을 말합니다.

팩토리 매서드에 대한 글은 아래를 참고해주세요!

 

[디자인 패턴] 팩토리 메서드(Factory Method) 패턴

❓팩토리 메서드 패턴? 팩토리 메서드 패턴은 팩토리 패턴에서 확장된 패턴이라 생각하시면 됩니다. 기존 팩토리 패턴은 객체의 생성을 처리하는 동작을 클래스 혹은 메서드로 분리하는 것을

lurgi.tistory.com

제가 이해한 바로는, 쉽게 말해서 여러개의 추상 팩토리를 가진 그룹을 만드는 패턴을 추상 팩토리라 할 수 있을 것 같습니다.

❓추상 팩토리 패턴의 예

다이어그램을 통해 알아봅시다.

다양한 추상 팩토리들로 부터 상속받은 모델들의 연결성으로, 객체들이 그룹화 되고 있습니다. 느껴지시나요? 저는 팩토리 메서드의 확장이라는 것이 느껴지더라구요.

코드를 통해 알아봅시다

// 추상 팩토리 인터페이스
class AbstractCarFactory {
    createTV() {}
    createFridge() {}
}
// 한국 팩토리와 미국 팩토리
class KoreaFactory extends AbstractCarFactory {
    createDoor() {
        return new KoreaDoor();
    }

    createTier() {
        return new KoreaTier();
    }
}

class USAFactory extends AbstractCarFactory {
    createDoor() {
        return new USADoor();
    }

    createTier() {
        return new USATier();
    }
}
// Door 추상 팩토리 인터페이스
class AbstractDoorFactory {
		//...
}
class KoreaDoor extends AbstractDoorFactory {
		//...
}

class USADoor extends AbstractDoorFactory {
		//...
}

// Tier 추상 팩토리 인터페이스
class AbstractTierFactory {
		//...
}
class KoreaTier extends AbstractTierFactory {
		//...
}
class USATier extends AbstractTierFactory {
    //...
}

Factory에서 생성을 담당하게 되고, 내부적으로 Door와 Tier를 생성하게 되는 패턴입니다.

❓추상 팩토리 패턴의 장단점?

이 같은 분리는 해결해야하는 문제가 생겼을 때마다 팩토리에서 상속받은 새로운 객체를 생성해내기 때문에 다른 클래스에 의존하지 않습니다. 하지만 동일한 인터페이스에서 호출받기 때문에 서로 호환성을 갖추며 일관되게 되죠. 이것이 추상 팩토리의 장점이라고 할 수 있습니다!

하지만 새로운 그룹이 추가되면 그에 따라서 서브 클래스들이 변경되야 하는 서브 클래스의 특성상 구조를 재설계하는 확장성 부분은 단점이 될 수 있습니다. 그만큼 복잡하기 때문에, 관리해야할 비용역시 증가하게 되구요. 이것이 단점이라 할 수 있겠습니다!