기능의 뼈대와 구현을 분리하는 행위
장점
- 공통 로직을 상위 클래스에 모아 중복 코드를 줄일 수 있다.
- 코드의 재사용성
단점
- 하위 클래스를 개발할때까지 어떤 방식으로 동작할지 예측 어려움
- 상위 클래스 수정 시 모든 하위 클래스를 변경해야 한다.
// 상위 클래스 - 뼈대(알고리즘 순서) 정의
abstract class Beverage {
// 템플릿 메서드 - 전체 흐름을 고정
// final로 하위 클래스가 순서를 바꾸지 못하게 막음
final void makeBeverage() {
boilWater(); // 공통
brew(); // 하위 클래스가 구현
pourInCup(); // 공통
addCondiments(); // 하위 클래스가 구현
}
// 공통 로직 - 상위 클래스에서 처리
private void boilWater() {
System.out.println("물을 끓인다");
}
private void pourInCup() {
System.out.println("컵에 붓는다");
}
// 추상 메서드 - 하위 클래스가 반드시 구현
abstract void brew();
abstract void addCondiments();
}
// 하위 클래스 1 - 커피
class Coffee extends Beverage {
@Override
void brew() {
System.out.println("필터로 커피를 우려낸다");
}
@Override
void addCondiments() {
System.out.println("설탕과 우유를 추가한다");
}
}
// 하위 클래스 2 - 홍차
class Tea extends Beverage {
@Override
void brew() {
System.out.println("찻잎을 우려낸다");
}
@Override
void addCondiments() {
System.out.println("레몬을 추가한다");
}
}'cs(with 매일메일)' 카테고리의 다른 글
| [260305목] 테스트 격리란 무엇인가요? (0) | 2026.03.05 |
|---|---|
| [260304수] NoSQL데이터베이스의 유형에는 어떤 것들이 있나요? (0) | 2026.03.04 |
| [260302월] 논리 삭제와 물리 삭제의 차이점은 무엇인가요? (0) | 2026.03.03 |
| [260227금] 어떤 예외가 발생하면 트랜잭션을 롤백하나요? (0) | 2026.02.27 |
| [260226목] 스레드 풀 포화 정책이란 무엇인가요? (0) | 2026.02.26 |