템플릿 메서드 패턴은 일반적으로 추상 클래스와 메서드를 사용하여 구현된다. 이 패턴의 핵심은 슈퍼클래스에서 알고리즘의 골격을 정의하고, 일부 단계를 서브클래스에서 구현할 수 있도록 하는 것이다. 이를 통해 코드의 중복을 방지하고, 서브클래스에서 특정 단계를 필요에 따라 재정의할 수 있는 유연성을 제공한다.

 

추상 클래스 Animal을 만들어 보자. 이 클래스에는 makeSound라는 템플릿 메서드가 있고,

sound라는 추상 메서드가 있다.

public abstract class Animal {
    // 템플릿 메서드
    public final void makeSound() {
        sound();
    }

    // 추상 메서드
    abstract void sound();
}

이제 Animal 클래스를 상속받는 DogCat 클래스를 만들어 보자.

public class Dog extends Animal {
    void sound() {
        System.out.println("멍멍!");
    }
}

public class Cat extends Animal {
    void sound() {
        System.out.println("야옹!");
    }
}

이 예제에서 Dog와 Cat 클래스는 Animal 클래스의 sound 메서드를 재정의하여

개와 고양이가 각각 다른 소리를 낼 수 있다.

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();

        dog.makeSound();  // Output: 멍멍!
        cat.makeSound();  // Output: 야옹!
    }
}

이렇게 템플릿 메서드 패턴을 사용하면, 공통적인 메서드의 구조를 유지하면서

필요한 부분만 서브클래스에서 재정의 할 수 있다.

이 패턴은 알고리즘의 각 단계를 유연하게 변경하거나 확장할 수 있도록 하는 데 유용하다.

 

하지만 아래와 같은 단점도 있다. 

  1. 강한 결합성: 템플릿 메서드 패턴은 상속을 사용하기 때문에, 서브클래스와 슈퍼클래스 사이에 강한 결합이 생긴다. 이로 인해 슈퍼클래스의 변경이 서브클래스에 영향을 미칠 수 있다.
  2. 클래스 수 증가: 각각의 변형이 서브클래스로 구현되어야 하므로, 클래스의 수가 늘어날 수 있다. 이로 인해 코드의 복잡성이 증가할 수 있다.

 

'Java > 스프링 AOP' 카테고리의 다른 글

콜백 패턴  (0) 2023.08.02
전략 패턴  (0) 2023.08.02
쓰레드 로컬(Thread Local)  (0) 2023.07.28
인공지능과 사랑에 빠졌던 건에 대하여  (0) 2023.07.28
동시성 문제  (0) 2023.07.27

+ Recent posts