C++ Practice

C++ 디자인 패턴 - 추상 팩토리

Srff5123 2024. 7. 24. 18:34
728x90

추상 팩토리 패턴은 객체 지향 프로그래밍에서 사용되는 생성 디자인패턴으로, 

구체적인 클래스를 지정하지 않고, 관련 또는 종속 객체의 패밀리를 생성하기 위한 인터페이스를 제공한다.

 또한 객체 생성을 캡슐화하고, 객체가 호환되고 적절하게 구성되었는지 확인하는 방법이다.

 

 

 

카카오톡을 예시로 들면 카카오톡의 배경에 다양한 테마를 지원해야 하는 GUI 툴킷을 개발한다고 가정하면

각 테마는 버튼, 텍스트필드 등 다양한 UI구성 요소로 구성되어 있고, 모두 선택한 테마와 시각적으로

일치하도록 설계가 되어져있다.

 

그렇다면 관련 또는 종속 객체 패밀리는 테마를 구성하는 UI 구성요소인 버튼, 텍스트필드 세트를 나타내고.

 

각 테마(어두움, 밝음)는 관련되거나 종속된 개체의 그룹이다. 테마 내의 모든 UI 구성 요소는 일관된 시각적 모양과 동작을 공유해야 하기 때문입니다.

 

추상 팩토리 패턴은 이러한 관련 객체 패밀리를 생성하기 위한 인터페이스를 제공하고, 추상 팩토리의 각 메서드는 한 유형의 UI 구성요소 (CreateButton() , CreateTextField() )를 생성하는데 해당하게 되고,

 

구체적 팩토리 클래스( LightThemeFactory, DarkThemeFactory)는 추상 팩토리 인터페이스를 구현하고 특정 테마에 속하는 UI 구성 요소를 생성하기 위한 구체적인 구현을 제공한다.

이것을 UML 클래스 다이어그램으로 나타내면

이런 형태가 된다.

 

추상 팩토리의 장점

팩토리에서 생성된 객체가 패밀리 내에서 호환되고 일관성 있는지 확인하여 전체시스템의 무결성을 향상시켜 일관성생기고, 기존 클라이언트 코드를 수정하지 않고, 새로운 제품군이나 변형을 쉽게 추가 할 수 있어 유연성이 생긴다.

또한 구체적 클래스는 각각의 팩토리 내에 캡슐화되어 종속성을 줄이고 변경 사항을 관리하기 쉽게 하여 캡슐화 또한 가능하다.

 

추상 팩토리의 단점

패턴을 구현하면 수많은 클래스와 인터페이스가 필요해지고, 잠재적으로 코드 복잡성이 증가한다.

제품군을 수정하거나 확장하려면 여러곳에서 변경이 필요하기에 시스템 유연성이 떨어질수있다.

팩토리를 통해 객체를 생성하면 약간의 런타임 오버헤드가 발생할 수 있다.

 

 

 

 

728x90