추상 팩토리 패턴
GoF의 디자인패턴 중 객체생성의 추상 팩토리 패턴을 Java 로 정리한 글
관련있는 여러개의 인스턴스를 만들어주는 인터페이스로 분리하여 생성하는 패턴
팩토리메서드는 인자 타입에 따라 여러타입의 객체를 반환할 수도 있으 구체적인 클래스에서 객체를 생성
추상 팩토리 패턴은 이 추상 팩토리의 구현체에 존재하는 각각의 메서드들은 한가지 종류의 객체만 반환을 하고 추상적인 인터페이스를 통해 생성
- 1.Factory 클래스에서 객체에 대한 생성을 지원하는 범위
- 팩토리 메소드 패턴
- 한 팩토리당 한 종류 ( create 메서드가 Factory 클래스에 1개) ⇒ 뭐 만들어줘→ 뭐만 내가 결정하면됨.
- 한 개의 메서드로 여러 개의 객체를 만들수 있다.
- 추상 팩토리 패턴
- 한 팩토리에서 서로 연관된 여러 종류 모두 지원( create() 메서드가 팩토리 클래스에 여러 개)
- A로 만들어 → A를 만들어줌 , B로 만들어 → B를 만들어줌 (선택지 자체에 구체적인 뭘 만들어달라는게 있음, 선택지 자체를 만들어서 줌.)
- 구상 클래스에 의존하지 않고 여러 개의 관련된 객체를 하나의 팩토리로 묶음
- 2.팩토리 메서드에서 만드는 객체의 종류
- 팩토리 메소드 패턴의 팩토리 메소드
- 인자에 따라 객체의 종류가 결정됨 → 만들어줘 A → A클래스를 골라서 인스턴스 생성
- 추상 팩토리 패턴 패턴 의 팩토리 메서드
- 인자에 따라 관련된 객체들을 생성하는 팩토리의 종류가 결정됨 → A 만들어줘 하면 → A Factory를 골라서 만듬.
- 3.포커스
- 팩토리 메서드 패턴
- 메서드(Factory Method) 레벨에서 포커스를 맞춤
- 클라이언트의 인스턴스 생성 및 구성에 대한 책임을 덜어줌
- 추상 팩토리 패턴
- 클래스(Abstract Factory) 레벨에서 포커스를 맞춤
- 각 Product들이 다른 클래스와 함께 사용될 때의 제약사항을 강제할 수 있다.
- 단, 새로운 Factory를 추가할 때 많은 작업이 필요하다.
- 4.Inhritance(상속), Composition(구성)
- 팩토리 메서드 패턴
- 상속을 사용하여 객체의 인스턴스 생성에 대해서는 서브클래스에 의존
- 지역 레퍼런스 없이 바로 하위 클래스의 함수를 호출하여 객체를 만듦
- 추상 팩토리 패턴
- 지역 레퍼런스를 두어 , 외부로부터 Factory 객체를 DI 받아서 위임.
한마디로 팩토리 메서드는 적인 객체 생성 과정을 하위 또는 구체적 클래스에 옮기는게 목적이고, 추상팩토리는 여러 객체를 구체적인 클래스에 의존적이지 않게 해주는게 목적이다.
- java.xml 파일
- DocumentBuilderFactory
- Spring FactoryBean
- 인터페이스인데, 이걸 구현 받아서→ 등록만 해놓으면 Bean으로 이 객체가 쭉쭉 나오는 방식.
- Factory등록해놓으면 Ship.class를 통해서 빈을가져오면 알아서 Factory에서 빼서 가져오는 방식
Last modified 1yr ago