ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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는 적합하지 않다
    반응형

    댓글

Designed by Tistory.