추상 팩토리는 생성 디자인 패턴이며, 관련 객체들의 구상 클래스들을 지정하지 않고도 해당 객체들의 제품 패밀리들을 생성할 수 있도록 합니다.
추상 팩토리는 모든 고유한 제품들을 생성하기 위한 인터페이스를 정의하지만 실제 제품 생성은 구상 팩토리 클래스들에 맡깁니다. 또 각 팩토리 유형은 특정 제품군에 해당합니다.
클라이언트 코드는 생성자 호출(new
연산자)로 직접 제품들을 생성하는 대신 팩토리 객체의 생성 메서드들을 호출합니다. 팩토리는 단일 제품 변형에 해당하므로 해당 팩토리의 모든 제품이 호환될 것입니다.
클라이언트 코드는 추상 인터페이스를 통해서만 팩토리 및 제품과 함께 작동하며, 이렇게 하면 클라이언트 코드가 팩토리 객체에 의해 생성된 모든 제품 변형과 함께 작동할 수 있습니다. 새로운 구상 팩토리 클래스를 생성한 후 클라이언트 코드에 전달합니다.
다양한 팩토리 패턴들과 개념들의 차이점을 이해하지 못하셨다면 팩토리 비교를 읽어보세요.
복잡도:
인기도:
사용 예시들: 추상 팩토리 패턴은 자바 코드에 자주 사용됩니다. 많은 프레임워크들과 라이브러리들은 이 패턴을 표준 컴포넌트들을 확장 및 사용자 지정하기 위해 사용합니다.
다음은 코어 자바 라이브러리로부터 가져온 몇 가지 예시들입니다:
식별: 패턴은 팩토리 객체를 반환하는 메서드들의 존재 여부로 쉽게 인식할 수 있습니다. 그 후 팩토리는 특정 하위 컴포넌트들을 만드는 데 사용됩니다.
크로스 플랫폼 GUI 컴포넌트들의 패밀리들 및 그들의 생성
이 예시에서 버튼과 체크박스는 제품 역할을 하며, 그들에게는 맥과 윈도우의 두 가지 변형이 있습니다.
추상 팩토리는 버튼과 체크박스를 생성하기 위한 인터페이스를 정의합니다. 또 두 개의 구상 팩토리들이 있으며, 이들은 모든 제품을 단일 변형으로 반환합니다.
클라이언트 코드는 추상 인터페이스들을 사용하여 팩토리 및 제품과 함께 작동하며, 이는 팩토리 객체의 유형에 따라 같은 클라이언트 코드가 많은 제품 변형과 함께 작동하도록 합니다.
buttons: 첫 번째 제품의 계층구조
buttons/Button.java
buttons/MacOSButton.java
buttons/WindowsButton.java
checkboxes: 두 번째 제품의 계층구조
checkboxes/Checkbox.java
checkboxes/MacOSCheckbox.java
checkboxes/WindowsCheckbox.java
factories
factories/GUIFactory.java: 추상 팩토리
factories/MacOSFactory.java: 구상 팩토리 (맥)
factories/WindowsFactory.java: 구상 팩토리 (윈도우)
app
app/Application.java: 클라이언트 코드
Demo.java: 앱 설정
OutputDemo.txt: 실행 결과