2012년 4월 24일 화요일

[Java Design Pattern_3]Template Method 설명


# Templete Method 

- 하위 클래스에서 구체적으로 처리하기



@ 템플릿이란 무엇인가 ?  


- 템플릿이란 문자 모양으로 구멍이 뚫려있는 얇은 플라스틱 판을 말합니다. 구멍에 어떤 펜을 쓰느냐에 따라 같은 템플릿(모양)에서도 다양한 느낌을 낼수 있습니다.


@ Template Method 패턴이란


 - Template Method 패턴은 상위 클래스쪽에 탬플릿에 해당하는 메소드가 정의(주로 추상 메서드)되어 있고, 하위 클래스에서 구체적으로 구현되는 것을 말합니다. 이와 같이 상위 클래스에서 처리의 뼈대를 결정하고, 하위 클래스에서 그 구체적인 내용을 결정하는 디자인 패턴을 Template Method패턴이라고 합니다.


@ Template Method 패턴의 등장인물


 - AbstractClass (추상 클래스) : 이 클래스에서는 탬플릿 메소드를 구현(정의)합니다.

 - ConcreteClass (구현 클래스) : 추상 클래스에서 정의된 메소드를 구체적으로 구현 합니다.


@ 예제 


 - 구조





- AbstractDisplay : 템플릿 메소드 구현 및 정의.
        구체적으로 구현 되지 않은 open(),print(),close() 메소드로 display 메소드만 구현 되어 있음.(open(),print(),close() 메소드 구현은 하위 클래스에 맡김.)

- CharDisplay, StringDisplay : open(),print(),close() 구현 하는 클래스

- Main : AbstractDisplay 객체를 생성해서 사용.



@ Think!


1. 로직을 공통화 할수 있어 수정이 용이하다.


 - 상위 클래스의 템플릿 메소드에서 알고리즘(display())이 기술되어 있으므로, 하위 클래스에서 알고리즘을 일일이 기술할 필요가 없다.

 - 만약 수정 사항이 생겨도 해당 구현 클래스만 수정하면 된다. 즉, 알고리즘 수정시 상위 클래스, 구현 수정시 하위 클래스만 수정하면 된다.


2. 상위 클래스와 하위 클래스의 연계


- 상위 클래스에서 선언된 추상 메소드를 실제적으로 하위 클래스에서 구현하므로 어떤 시점에 메소드가 호출되는지 이해해야 하위 클래스에서 잘 구현할수 있다.


3. 하위 클래스를 상위 클래스에 넣어 동작시킨다.

 상위 클래스인AbstractDisplay형의 변수에 하위 클래스인 CharDisplay,StringDisplay인스턴스를 넣어 상위 클래스 템플릿 메소드은 display()를 사용한다. 이처럼 특정 인스턴스로 형변환을 하지 않고 동작하도록 하므로 어떤 하위 클래스 인스턴스를 넣어도 작동할 수 있다.


- 상속의 일반적인 원칙 -

" 상위 클래스형의 변수에 하위 클래스의 어떠한 인스턴스를 대입해도 제대로 작동할 수 있도록 한다" 
- The Liskov Substitution Principle(LSP)












댓글 없음:

댓글 쓰기