-
[JAVA]객체 지향 디자인 패턴 - Template Method Pattern(탬플릿 메소드 패턴)프로그래밍/Java 2022. 3. 23. 23:21반응형
Template Method Pattern이란?
- 어떤 메소드안에 정해진 형식이 있고 그 형식은 무조건 지켜져야 하지만, 형식안에 구현 부는 직접 작성하여 처리 할 때 사용하는 패턴
- 예를 들어 API 호출 할 때 Client가 request를 요청을 하면 무조건 response를 줘야하는 템플릿 이 있다고 가정해 보면 이것은 구조화된 형식 이므로 template Method로 구현이 가능하다. 그리고 그 방식은 어떻게 구현하든 상속받은 클래스에서 구현부를 자유롭게 정의 하는것이 template Method가 하는 역할이다. 방향성 및 형태만 잡아 주는 것이라고 생각하면 좋다
- 인증 Request를 보내는 것과 Response 받는 것은 똑같은 형식이다 하지만 그 받는 데이터 처리 하는 과정은 Kakao와 Naver Oauth가 다르기 때문에 내용 처리는 자식 클래스에서 따로 처리해주게 만들면 된다. Request와 response가 무조건 있어야하는 과정이므로 방향성 및 형태만 잡아주는 것이 Template Method의 구조이다.
Template Method Pattern Structure(상태 패턴 구조)
(출처 패스트캠퍼스)
- Car라는 객체가 있다고 가정해 보자.
- AICar와 ManualCar 두 객체는 Car객체를 상속 받고 Drive와 Stop메소드만 오버라이딩하여 재구성한다.
- Car에서는 Template Method run()을 가지고 있으며 drive 와 stop메소드는 abstract를 지정하여 무조건 하위에서 재구성하게 만들고 startCar와 turnOff는 그냥 메소드로 만들어 지정해도 되고 안해도 되는 메서드로 만들든다.
- 이렇게 하면 drive와 stop을 꼭 구현해야하는 run이라는 Template Method가 만들어지게 된다.
구현부
public abstract class Car { //추상메소드 하위 클래스에서 꼭 재정의를 한다. public abstract void drive(); public abstract void stop(); public void startCar() { System.out.println("시동을 켭니다."); } public void turnOff() { System.out.println("시동을 끕니다."); } //final 을 접근제어자 앞에 붙이면 재정의가 되지 않는다. //꼭 이런 형태로 구동이 되게끔 정의를 해야한다고 만드는 로직 //이것이 템플릿 메서드이다. final public void run() { startCar(); drive(); stop(); turnOff(); } }
public class AICar extends Car{ @Override public void drive() { System.out.println("자율 주행을 합니다."); } @Override public void stop() { System.out.println("자율 주행을 정지합니다."); } }
public class ManualCar extends Car{ @Override public void drive() { System.out.println("수동 주행을 합니다."); } @Override public void stop() { System.out.println("수동 주행을 정지합니다."); } }
구동하기
public class CarTest { public static void main(String[] args) { Car car1 = new AICar(); Car car2 = new ManualCar(); car1.run(); //출력 //시동을 켭니다. //자율 주행을 합니다. //자율 주행을 정지합니다. //시동을 끕니다. car2.run(); //시동을 켭니다. //수동 주행을 합니다. //수동 주행을 정지합니다. //시동을 끕니다. } }
Template Method Pattern 을 사용하는 이유?
- Template Method는 framework단에서 많이 볼 수 있다. framework에서 구성되어있는 메소드나 형식을 꼭 지켜야 하며 그 method를 상속받아 구현하여 반환해주는 형태가 많기 때문인다.
- Template Method는 형태를 잡아주고 그 길을 따르게 만들어주는 메소드이기 때문에 형태가 지정되어 바뀌지 않고, 내부 로직 만 변경되는 경우 사용한다.
- 프로세스와 형태가 변한다면 Template Method는 적합하지 않다
반응형'프로그래밍 > Java' 카테고리의 다른 글
[JAVA]객체 지향 디자인 패턴 - Factory Pattern(팩토리 패턴) (0) 2022.03.28 [JAVA]객체 지향 디자인 패턴 - Decorator Pattern(장식자 패턴) (0) 2022.03.24 [JAVA]객체 지향 디자인 패턴 - Proxy Pattern(대리인 패턴) (0) 2022.03.23 [JAVA]객체 지향 디자인 패턴 - Adapter Pattern(어댑터 패턴) (0) 2022.03.23 [JAVA]객체 지향 디자인 패턴 - State Pattern(상태 패턴) (0) 2022.03.22