안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
볼트,키티와 함께 노는 시간을 보내는 세계를 프로그램으로 표현한다면
아래 2개의 예제와 같이 2개의 클래스가 필요하겠죠?
예제1)
public class Dog {
public void playWithOwner() {
System.out.println("귀염둥이 이리온...");
System.out.println("야옹~ 야옹~");
System.out.println("꼬리 살랑 살랑~");
System.out.println("잘했어");
}
}
예제2)
public class Cat {
public void playWithOwner() {
System.out.println("귀염둥이 이리온...");
System.out.println("야옹~ 야옹~");
System.out.println("꼬리 살랑 살랑~");
System.out.println("잘했어");
}
}
위 두 예제의 playWithOwner()메서드를 보면 4번째 줄만 빼고 모두 동일하죠?
이 코드를 객체 지향의 상속을 통해 상위 클래스와 하위클래스로 나누고
싶다는 생각이 들지 않나요?
템플릿 메서드 패턴을 적용해보겠습니다.
예제0) 상위 클래스
package templateMethodPattern;
public abstract class Animal {
// 템플릿 메서드
public void playWithOwner() {
System.out.println("귀염둥이 이리온...");
play();
runSomething();
System.out.println("잘했어");
}
// 추상 메서드
abstract void play();
// Hook(갈고리) 메서드
void runSomething() {
System.out.println("꼬리 살랑 살랑~");
}
}
예제1)하위 클래스
package templateMethodPattern;
public class Dog extends Animal {
@Override
// 추상 메서드 오버라이딩
void play() {
System.out.println("멍! 멍!");
}
@Override
// Hook(갈고리) 메서드 오버라이딩
void runSomething() {
System.out.println("멍! 멍!~ 꼬리 살랑 살랑~");
}
}
예제2)하위 클래스
package templateMethodPattern;
public class Cat extends Animal {
@Override
// 추상 메서드 오버라이딩
void play() {
System.out.println("야옹~ 야옹~");
}
@Override
// Hook(갈고리) 메서드 오버라이딩
void runSomething() {
System.out.println("야옹~ 야옹~ 꼬리 살랑 살랑~");
}
}
예제3) 실제 실행하는 클래스
package templateMethodPattern;
public class Driver {
public static void main(String[] args) {
Animal bolt = new Dog();
Animal kitty = new Cat();
bolt.playWithOwner();
System.out.println();
System.out.println();
kitty.playWithOwner();
}
}
상위 클래스인 Animal에는 템플릿(견본)을 제공하는 playWithOwner()메서드와
하위 클레스에게 구현을 강제한 play() 추상 메서드, 하위 클래스가
선택적으로 오버라이딩할 수 있는 runSomething()메서드가 있습니다.
하위 클래스인 Dog와 Cat은 상위 클래스인 Animal에서
구현을 강제하고 있는 play() 추상 메서드를 반드시 구현해야 하죠.
runSomething() 메서드는 선택적으로 오버라이딩 할 수 있습니다.
이렇게
상위 클래스에 공통 로직을 수행하는 템플릿 메서드와 하위 클래스에
오버라이딩을 강제흐는 추상 메서드 또는 선택적으로
오버라이딩할 수 있는 훅(HOOK) 메서드를 두는 패턴을 템플릿 메서드 패턴이라고 해요.
템플릿 메서드를 한 문장으로 정리해보면
-상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴-
입니다.
'개발 etc' 카테고리의 다른 글
JAVA 자바 전략패턴(Strategy Pattern) (0) | 2017.03.12 |
---|---|
JAVA 자바 팩터리 메서드 패턴(Factory Method Pattern) (0) | 2017.03.12 |
JAVA 자바 싱글턴 패턴(Singleton Pattern) (0) | 2017.03.12 |
JAVA 자바 데코레이터 패턴(Decorator Pattern) (0) | 2017.03.12 |
JAVA 자바 프록시 패턴(Proxy Pattern) (0) | 2017.03.12 |