디자인 패턴 - 팩토리 패턴(Factory pattern)

팩토리 메소드 패턴

정의 - 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하는 패턴. 

 클래스 인스턴스를 만드는 일을 서브클래스에게 맡기는 것. 객체를 생성하는 작업을 자식 클래스에서 캡슐화한다.

 Creator는 추상 클래스로서 객체를 생성하기 위해 구현할 팩토리 메소드를 정의한다. 이를 구현한 자식 클래스에서 어느 클래스의 인스턴스를 만들지 결정한다. 객체 생성과 사용 부분을 분리할 수 있다. 좀 더 느슨한 결합이 가능.
 Creator는 실제 생성될 객체에 대한 사전지식이 아무것도 없다. 오로지 사용하는 서브클래스에 의해 객체 인스턴스가 결정된다.

 간단한 팩토리와의 차이점. 간단한 팩토리는 단순히 객체 생성을 캡슐화했을 뿐이며, 팩토리 메소드 패턴은 객체 생성을 위한 프레임워크를 만들었기 때문에 어느 클래스의 인스턴스를 만들지에 대해 동적으로 결정할 수 있다.

 팩토리 메소드 패턴은 구상 클래스에 대한 의존성을 줄이는 객체지향 디자인 원칙을 따른다.
Dependency Inversion Principle.'
추상화된 것에 의존하도록 만들어라. 구상 클래스에 의존하지 않게끔 만들어라.'
고수준(추상화된) 구성요소가 저수준(구체화된) 구성요소에 의존하면 안 된다.

예시:
SomeFactoryMethod : FactoryMethod
ClassInstance instance = new SomeFactoryMethod.Create();



추상 팩토리 패턴

정의 - 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 구상 클래스를 지정하지 않고 생성.

객체 구성을 통해 다른 객체의 레퍼런스를 이용해 인스턴스를 만든다.

예시 :
SomeAbstractFactory : AbstractFactory
AbstractFactory aSomeFactory = new SomeAbstractFactory
ClassInstance instance = CreateObject(aSomeFactory);



팩토리 메소드 패턴과 추상 팩토리 패턴의 차이:
팩토리 메소드 패턴에서는 상속을 통해 클래스를 사용해서 인스턴스를 만들고,
추상 팩토리 패턴에서는 구성을 통해 객체를 사용해서 인스턴스를 만든다.

댓글

이 블로그의 인기 게시물

디자인 패턴 - 더티 플래그(Dirty flag)

디자인 패턴 - 서비스 중개자 패턴(Service locator pattern)

인공지능 - 유한 상태 기계(Finite state machine)