팩토리 메서드( Factory Method )

Posted 2012. 10. 22. 16:57
팩토리 메서드란?
객체의 생성에 관련된 인터페이스를 정의하고 인터페이스를 구현하는 클래스에서 어떤 클래스를

인스턴스화(생성) 할 것인지를 정하게 두는 것.

서브플래스에서 인스턴스화를 하도록 미루를 것


특징)

팩토리 메서는 객체의 생성을 캡슐화 한다. 이는 생성 절차가 매우 복잡한 경우에 유용하다.



사용예)

라이브러리 코드, 프레임 웍 등등.

한 객체의 생성이 코드의 중복없이 재사용 하는 것을 못하도록 하는 상황

한 객체의 생성이 결합하는(사용하는) 클래스에서 필요하지 않은 정보다 리소스에 접근 해야 할때.

App에서 일관성 있는 동작을 하기 위해 생성된 객체의 살아있는 시간(lifetime)의 관리가 

중앙에서 관리할 필요가 있을 때.


단점 )

팩토리를 사용하기 위해 기존 클래스를 리펙토링 하는 것이 기존 클라의 코드를 깬다는 점.

private생성자를 사용 하기 때문에 해당 클래스를 확장 할 수 없다(상속받을수 없다)

-> 서브클래스는 상속받은 생성자를 호출해야하지만, 생성자가 private이라면,,불가능함

만약 그 클래스를 확장 한다면( ex)생성자를 protected로 만듬) 서브 클래스는 부모가 가지고 있는

모든 팩토리 메서드를 재구현 하지 않으면 서브클래스의 객체가 생성되는게 아니라 부모클래스의 객체가 생성된다..