Abstract Factory Pattern
Creational Pattern
Intro
구체적인 클래스를 지정하지 않고도 관련 객체의 패밀리를 생성할 수 있는 생성 디자인 패턴
문제 상황
새로운 타입의 객체가 필요한 경우 기존 코드를 변경하지 않고 추가하는 것이 필요
빈번한 확장이 필요 하지만 핵심 코드를 수정할 수 없음
해결책
특정 카테고리를 인터페이스로 명시적 선언하는 것이다.
카테고리에 따른 새로운 클래스를 필요로 하는 경우 인터페이스를 통해 구현할 수 있다.
모든 카테고리를 생성할 수 있는 목록이 있는 인터페이스 Abstract Factory 를 선언한다.
Abstract Factory 인터페이스 를 기반으로 구체화한 팩토리 클래스 를 생성
팩토리는 특정 종류의 객체를 반환하는 클래스이다.
주의사항
클라이언트 코드는 각각의 추상 인터페이스를 통해 Factory와 구체화 클래스에서 모두 작동해야 한다.
적용 가능한 상황
구체화 된 클래스에 의존하지 않고 구현하려는 경우
책임에 대한 기준이 모호한 펙토리 메서드가 있는 클래스가 있는 경우 추상 팩토리 구현을 고려해야 한다.
구현 방법
카테고리가 될 수 있는 유형에 대한 추상 인터페이스를 선언
특정 유형은 해당 인터페이스를 통해 구현
모든 추상 인터페이스에 대한 일련의 생성 방법으로 추상 팩토리 인터페이스를 선언
장점과 단점
Factory에서 생성되는 객체가 서로 호환되는지 확인 할 수 있다.
구체적인 객체와 클라이언트 코드 간의 긴밀한 결합을 피할 수 있다.
SRP 원칙: 객체 생성 코드를 한 곳으로 추출하여 코드를 더 쉽게 지원할 수 있다.
OCP 원칙: 기존 클라이언트 코드를 손상시키지 않고 새로운 객체의 변형을 도입할 수 있다.
패턴과 함께 많은 인터페이스와 클래스가 추가되므로 코드의 복잡성이 올라갈 수 있다.
예시
Last updated