템플릿 메서드 패턴은 일반적으로 추상 클래스와 메서드를 사용하여 구현된다. 이 패턴의 핵심은 슈퍼클래스에서 알고리즘의 골격을 정의하고, 일부 단계를 서브클래스에서 구현할 수 있도록 하는 것이다. 이를 통해 코드의 중복을 방지하고, 서브클래스에서 특정 단계를 필요에 따라 재정의할 수 있는 유연성을 제공한다.
추상 클래스 Animal을 만들어 보자. 이 클래스에는 makeSound라는 템플릿 메서드가 있고,
sound라는 추상 메서드가 있다.
public abstract class Animal {
// 템플릿 메서드
public final void makeSound() {
sound();
}
// 추상 메서드
abstract void sound();
}
이제 Animal 클래스를 상속받는 Dog와 Cat 클래스를 만들어 보자.
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: 야옹!
}
}
이렇게 템플릿 메서드 패턴을 사용하면, 공통적인 메서드의 구조를 유지하면서
필요한 부분만 서브클래스에서 재정의 할 수 있다.
이 패턴은 알고리즘의 각 단계를 유연하게 변경하거나 확장할 수 있도록 하는 데 유용하다.
하지만 아래와 같은 단점도 있다.
- 강한 결합성: 템플릿 메서드 패턴은 상속을 사용하기 때문에, 서브클래스와 슈퍼클래스 사이에 강한 결합이 생긴다. 이로 인해 슈퍼클래스의 변경이 서브클래스에 영향을 미칠 수 있다.
- 클래스 수 증가: 각각의 변형이 서브클래스로 구현되어야 하므로, 클래스의 수가 늘어날 수 있다. 이로 인해 코드의 복잡성이 증가할 수 있다.
'Java > 스프링 AOP' 카테고리의 다른 글
콜백 패턴 (0) | 2023.08.02 |
---|---|
전략 패턴 (0) | 2023.08.02 |
쓰레드 로컬(Thread Local) (0) | 2023.07.28 |
인공지능과 사랑에 빠졌던 건에 대하여 (0) | 2023.07.28 |
동시성 문제 (0) | 2023.07.27 |