Template Method Pattern은 일 처리의 단계를 미리 정해놓고 자세한 내용은 나중에 처리하도록 강제하고 싶을 때를 위한 패턴이다. 이를 위해 자바에서 제공하는 추상클래스를 살펴보자.
* Abstract Class vs Interface의 비교
public interface Interface {
public String showName();
}
public abstract class AbstractClass {
public String showName(); // body가 없으므로 Error!
}
* 자바의 인터페이스는 원하는 메서드를 미리 선언하고, 선언된 메서드를 상속받은 객체(구현체)가 구현하도록 강제하는 역할을 한다.
* 자바의 추상클래스는 인터페이스와 같은 의도이지만, 컴파일러는 "body( { } )"가 없다는 오류를 발생시킨다. 그래서 showName() 메서드도 추상화시켜야 한다.
public abstract class AbstractClass {
public abstract String showName(); // 메서드를 추상화 시킴
}
위의 코드블럭과 같은 상황은 추상 메서드를 가지는 추상클래스가 인터페이스가 된 상황이다. 추상 메서드를 통하여 인터페이스처럼 자신을 상속받아 만들어지는 객체에 어떤 메서드를 구현해야 한다는 의도를 프로그래밍할 수 있게 한다. 추가로 추상 메서드는 추상 클래스에서 바로 이용할 수 있다. 아직 상속받은 클래스가 만들어지지 않았더라도 추상 메서드를 이용하는 것이 가능하다.
public abstract class AbstractClass {
public abstract String showName();
public void printMessage() {
System.out.print("제 이름은 ");
System.out.print(showName());
System.out.print(" 입니다.");
}
}
class Supreme extends AbstractClass {
@Override
public String showName() {
return "Supreme";
}
public static void main(String[] args) {
AbstractClass myObject = new Supreme();
myObject.printMessage();
}
}
/* 출력결과 : 제 이름은 Supreme 입니다. */
순서 : main 메서드 -> new Supreme(); 생성자를 AbstractClass 타입의 myObject 참조변수에 할당한다 -> 이때 추상 메서드 showName();를 호출해서 값을 리턴해준다. -> 이후 printMessage(); 메서드 호출 -> 출력
추상 메서드의 활용은 거시적 단계를 다룰 수 있게 해준다. 한 마디로 요약하자면, 작업 순서를 정의해두고 구체적인 작업 내용은 알아서 구현하는 것이다. 현실적인 문제로 접근하면 조금 이해가 잘 되긴 한다. 간단한 계란 프라이를 만드는 과정에 빗대어 살펴보자. 계란 프라이를 만드는 순서는 대부분 비슷할 것이다. 아래와 같이 다섯 단계로 순서를 고정했다고 하자.
계란 프라이 요리법 | 방법 |
팬을 준비한다 | 프라이팬, 냄비, 인덕션 용 프라이팬 등 |
팬을 가열한다 | 가스레인지, 인덕션, 휴대용 버너 등 |
팬에 기름을 두른다 | 식용유, 버터, 카놀라유, 옥수수유 등 |
계란을 준비한다 | 왕란, 영양란, 유기농란 등 |
계란 안의 내용물을 팬에 넣는다 | 반으로 깨기, 윗 부분만 깨기 등 |
익힌다 | 완숙, 반숙 |
조금 예제가 억지..? 스러운 부분도 없지 않아 있지만, 위에서 정의한 예제를 보면, 순서는 확실히 보장되어 있고 저 순서대로 진행하면 계란 프라이가 완성된다. 하지만 그 상세한 과정 속에서 어떠한 도구와 재료들로 계란 프라이을 완성할 것인지는 개인마다 다르다. 이처럼 템플릿(계란 프라이 요리 순서)의 메서드(방법) 순서를 미리 정의해 놓는 패턴을 Template Method Pattern 이라고 한다.
'Note' 카테고리의 다른 글
[디자인패턴] Factory Pattern - 팩토리 패턴 (0) | 2021.12.16 |
---|---|
[디자인패턴] Proxy Pattern - 프록시 패턴 (0) | 2021.12.15 |
[MacOS] 응용프로그램을 열 수 있는 권한이 없습니다. (0) | 2021.10.22 |
[정보처리기사] 2021년 정보처리기사 3회 실기 기출 (0) | 2021.10.18 |
[정보처리기사] 정보처리기사 디자인 패턴 및 예상문제 (0) | 2021.10.15 |