일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 카카오테크캠퍼스
- AI/ML
- electron
- 카테캠
- 개발/컴퓨터네트워크
- 알고리즘
- 개발/MySQL
- 개발/네트워크
- 개발/에러
- ⌨️Developer
- AI/GPT
- 개발/프레임워크&라이브러리
- 개발/CS/알고리즘
- 개발
- 개발/보안
- 개발/언어론
- 개발/Java/Spring
- 취업
- 카카오 테크 캠퍼스
- 개발/CS/OS
- ⌨️Developer/보안
- 개발/환경
- 대외활동/카카오테크캠퍼스
- 개발/OOP
- 개발/webrtc
- ai
- 개발/언어/Java
- 개발/Java
- 개발/Tools/프레임워크/Spring
- 개발/Electron
- Today
- Total
봄수의 연구실
Template 메서드 패턴 본문
Template 메서드 패턴
템플릿 메서드 패턴은 알고리즘의 구조를 정의하는 추상 클래스와 실제 구현을 수행하는 하위 클래스로 구성된 디자인 패턴입니다.
추상 클래스에서는 알고리즘의 골격을 정의하며, 하위 클래스에서는 그 골격에 따라 실제 구현을 제공합니다.
이렇게 하여 알고리즘의 구조를 변경하지 않고 일부 구현을 변경할 수 있습니다.
예제 코드
abstract class Beverage {
// 템플릿 메소드
final void prepareRecipe() {
boilWater();
brew();
pourInCup();
addCondiments();
}
abstract void brew(); // 추상 메소드
abstract void addCondiments(); // 추상 메소드
void boilWater() {
System.out.println("Boiling water");
}
void pourInCup() {
System.out.println("Pouring into cup");
}
}
class Coffee extends Beverage {
@Override
void brew() {
System.out.println("Brewing coffee");
}
@Override
void addCondiments() {
System.out.println("Adding sugar and milk");
}
}
class Tea extends Beverage {
@Override
void brew() {
System.out.println("Steeping tea");
}
@Override
void addCondiments() {
System.out.println("Adding lemon");
}
}
public class Main {
public static void main(String[] args) {
Coffee coffee = new Coffee();
Tea tea = new Tea();
System.out.println("Preparing coffee:");
coffee.prepareRecipe();
System.out.println("\nPreparing tea:");
tea.prepareRecipe();
}
}
위 예시에서 Beverage
추상 클래스는 템플릿 메소드인 prepareRecipe
를 포함하며, 일부 구현을 하위 클래스에게 위임하는 brew
와 addCondiments
추상 메소드를 가집니다.
Coffee
와 Tea
클래스는 Beverage
를 상속받아 각각 brew
와 addCondiments
메소드를 구현하였습니다.
이렇게 함으로써, Beverage
클래스에서 정의된 알고리즘의 구조를 변경하지 않고도, Coffee
와 Tea
클래스에서 각각 다른 구현을 제공할 수 있습니다.
Static과 Final로 더 똑똑하게 사용하자
템플릿 메서드 패턴에서 final
이나 static
을 사용하면 추상 클래스의 메서드에 대한 변경을 제한하고 안정성을 높일 수 있습니다.
final 메서드
final
키워드가 붙은 메서드는 서브클래스에서 오버라이드할 수 없습니다.
템플릿 메서드 패턴에서는 일부 공통 로직을 제공하는 메서드를 final
로 선언하여 서브클래스가 해당 메서드를 수정(Overriding(재정의)하지 못하게 함으로써, 전체 프로세스에 일관성을 유지할 수 있습니다.
이렇게 하면 템플릿 메서드를 사용하는 곳에서 예기치 않은 동작 변경을 방지할 수 있습니다.
static 메서드
static
메서드는 클래스 레벨에서 실행되며, 인스턴스화 없이 호출할 수 있습니다.
이는 메서드가 인스턴스 변수에 의존하지 않고, 메서드의 동작이 인스턴스의 상태에 영향을 받지 않음을 의미합니다.
이러한 특성 때문에, 템플릿 메서드 패턴에서 static
메서드를 사용하여 일부 로직을 공통적으로 제공하고, 이를 서브클래스에서 변경하지 못하게 할 수 있습니다.
결국, 템플릿 메서드 패턴에서 final
과 static
을 사용하는 이유는 추상 클래스에서 제공하는 일부 메서드를 고정하고, 안정성과 일관성을 유지하기 위함입니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Java' 카테고리의 다른 글
추상클래스(Abstract Class) (1) | 2023.04.27 |
---|---|
프레임워크와 라이브러리의 차이 (0) | 2023.04.27 |
다운 캐스팅(DownCasting) (0) | 2023.04.27 |
가상 함수(Virtual Method) (0) | 2023.04.27 |
Is-A와 HAS-A 또는 Inheritance와 Composition - 🐥 카카오 테크 캠퍼스 (0) | 2023.04.27 |