추상(Abstract) 팩토리(Factory) 패턴

HEETAE HEO·2022년 6월 23일
0
post-thumbnail

추상 팩토리 패턴(Abstract Frctory Pattern)

추상 팩토리 패턴이라는 이름만 봐서는 팩토리 메서드 패턴인데 추상이 추가된건가? 라는 생각이 드실 수 있습니다.

명확한 차이점은

  • 팩토리 패턴
    : 조건에 따른 객체 생성을 팩토리 클래스로 위임하여, 팩토리 클래스에서 객체를 생성하는 패턴
  • 추상 팩토리 패턴
    : 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이를 팩토리르 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴

추상 팩토리 패턴은 어떻게 보면, 팩토리 메서드 패턴을 좀 더 캡슐화한 방식이라고 볼 수 있습니다.

추상 팩토리 만들기

public interface CarPartsFactory {
	Handle createHandle();
    Wheel createWheel();
}

현재 Client의 코드 부분의 수정은 Wheel, Handle 같은 Parts들을 만드는 곳에서 발생한다. 하여 위와 같이 각 Parts들(Handel, Wheel)을 interface로 만든 뒤, 각 Part들을 만들어 반환하는 interface를 정의합니다.

실제 팩토리 만들기

public class WhiteCarPartsFactory implements CarPartsFactory{
	
    @override
    public Handle createHandle() {
    	return new WhiteHandle();
    }
    
    @override
    public Wheel createWheel() {
    	return new WhiteWheel();
    }
}

추상 팩토리를 implements하게 하여 팩토리를 구체화한다.
해당 Factory는 WhiteHandle, WhiteWheel을 위한 팩토리이다.

Client

이제 생성자에서 이를 구체화 해보겠습니다.

public Car createCar() { 
	Car car = new Car();
    car.setHandle(carPartsFactory.createHandle());
 car.setWheel(carPartsFactory.createWheel());
 return car;

Handle과 Wheel을 set하는 부분이 구체적인 클래스에서 인터페이스에 의존함으로써 결합력이 느슨해진 것을 알 수 있습니다.

Factory Methods Pattern vs Abstract Factory Pattern

팩토리 메서드 패턴 : 인스턴스를 만드는 과정에 집중이 되어 있다.

추상 팩토리 메서드 패턴 : 클라이언트의 입장에서 클라이언트가 추상화된 인터페이스를 통해 객체를 생성할 수 있도록 해준다.

공통점 : 둘 다 구체적인 객체 생성 과정을 추상화한 인터페이스를 제공한다.

초점

팩토리 메서드 패턴은 팩토리를 구현하는 방법에 초점을 두고

추상 팩토리 메서드 패턴은 팩토리를 사용하는 방법에 초점을 둔다

목적

팩토리 메서드 패턴은 구체적인 인스턴스 생성 과정을 하위 또는 구체적인 클래스로 옮기는 것이 목적이고, 추상 팩토리 패턴은 관련있는 여러 객체를 구체적인 클래스에 의존하지 않고 만들 수 있게 해주는 것이 목적이다.

profile
Android 개발 잘하고 싶어요!!!

0개의 댓글