템플릿 메소드 패턴과 마찬가지로 상속을 통해 기능을 확장하게 하는 패턴이다. 그래서 구조도 비슷하다 


슈퍼클래스 코드에서는 서브클래스에서 구현할 메소드를 호출해서 필요한 타입의 오브젝트를 가져와 사용한다.

이 메소드는 주로 인터페이스 타입으로 오브젝트를 리턴하므로 서브클래스에서 정확히 어떤 클래스의 오브젝트를 만들어 리턴할지는 슈퍼클래스에서는 알지 못한다 사실 관심도 없다.


서브클래스는 다양한 방법으로 오브젝트를 생성하는 메소드를 재정의 할 수 있다. 


이렇게 서브클래스에서 오브젝트 생성 방법과 클래스를 결정할 수 있도록 미리 정의해둔 메소드를 팩토리 메소드라고 하고 

이 방식을 통해 오브젝트 생성 방법을 나머지 로직, 즉 슈퍼클래스의 기본 코드에서 독립시키는 방법을 팩토리 메소드 패턴이라고 한다.


자바에서 오브젝트를 생성하는 기능을 가진 메소드를 팩토리 패턴이라고 부르기도 한다. 의미가 다르므로 혼동X


참고- 토비의 스프링3.0

'JAVA > 디자인 패턴' 카테고리의 다른 글

탬플릿 메소드 패턴  (0) 2013.07.25
디자인 패턴  (2) 2013.07.25

상속을 통해 슈퍼클래스의 기능을 확장할 때 사용하는 가장 대표적인 방법.

변하지 않는 기능은 슈퍼클래스에 만들어 두고 자주 변경되며 확장할 기능은 서브클래스에서 만들도록 한다. 


슈퍼클래스에서는 미리 추상 메소드 또는 오버라이드 가능한 메소드를 정의해두고 이를 활용해 코드의 기본 알고리즘을 담고 있는 템플릿 메소드를 만든다. 


슈퍼클래스에서 디폴트 기능을 정의해두거나 비워뒀다가 서브클래스에서 선택적으로 오버라이드할 수 있도록 만들어둔 메소드를 훅(hook) 메소드라고 한다. 서브클래스에서는 추상 메소드를 구현하거나, 훅 메소드를 오버라이드하는 방법을 이용해 기능의 일부를 확장한다. 


public abstract class Super {

//기본 알고리즘 코드

hookMethod();

abstractMethod();

...

}


proteted void hookMethod(){} //선택적으로 오버라이드 가능한 훅 메소드

public abstract oid abstractethod(); //서브클래스에서 반드시 구현해야 하는 추상 메소드


public class Sub1 extends Super {

protected void hookMethod(){

...

}

public void abstractMethod(){

...

}

}

참고 - 토비의 스프링 3.0


'JAVA > 디자인 패턴' 카테고리의 다른 글

팩토리 메소드 패턴  (0) 2013.07.25
디자인 패턴  (2) 2013.07.25

디자인 패턴이란?


소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션


장점 : 패턴의 이름으로 설계 의도, 해결책을 한번에 해결 할 수 있다.


패턴의 설계 구조:

 대부분 객체지향적인 설계로부터 문제를 해결하기 위해 적용 가능한 확장성 추구 방법은 두 가지로 정리된다.

 1. 클래스 상속

 2. 오브젝트 합성

따라서 패턴의 결과로 나온 코드 설계 구조는 대부분 비슷하다.


중요 포인트:

 각 패턴의 핵심이 담긴 목적, 의도

 -> 패턴을 적용할 상황, 해결해야 할 문제 솔루션의 구조와 각 요소의 역할. 핵심 의도를 기억해야 한다.


참고: 토비의 스프링3.0

'JAVA > 디자인 패턴' 카테고리의 다른 글

팩토리 메소드 패턴  (0) 2013.07.25
탬플릿 메소드 패턴  (0) 2013.07.25