반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
Tags
- 네트워크
- 자바스크립트
- javascript
- js
- 트러블슈팅
- WIL
- mongo
- mongoose
- react
- Git
- mysql
- 리눅스
- 회고
- 생각정리
- 코테
- next.js
- 기록
- 생각일기
- MongoDB
- CS
- 알고리즘
- 생각로그
- 피드백
- typescript
- nest.js
- til
- 주간회고
- Java
- Grafana
- array
Archives
- Today
- Total
코딩일상
템플릿 메서드 패턴 (Template Method Pattern) 정리 본문
반응형
템플릿 메서드 패턴 한 줄 정의
Template Method Pattern이란
알고리즘의 전체 흐름(뼈대) 은 상위 클래스에서 정의하고,
그중 일부 단계만 하위 클래스에서 구현하도록 하여
알고리즘 구조는 고정하면서, 세부 동작만 확장하는 패턴이다.
템플릿 메서드 패턴이 필요한 이유 (문제 상황)
class CardPayment {
public void process() {
validate();
pay();
notifyUser();
}
}
class BankPayment {
public void process() {
validate();
pay();
notifyUser();
}
}
- 결제 방식만 다르고
- 결제 흐름은 완전히 동일
요구사항 변경
“결제 방식은 계속 늘어나지만,
검증 → 결제 → 알림 순서는 절대 바뀌면 안 됨”
- 누락되면 금전 사고
- 순서 변경되면 장애
이 방식의 문제점은 아래와같다
1) 중복 코드 증가 즉, process() 로직이 모든 클래스에 반복
2)검증 로직 변경 시 모든 클래스 수정
3) 흐름 보장 불가: 개발자 실수로 notifyUser() 누락 가능
문제의 본질
알고리즘의 흐름과 세부 구현이 섞여 있음
공통 흐름을 강제할 방법이 없음
템플릿 메서드 패턴의 해결 아이디어
알고리즘의 뼈대는 상위 클래스에서 고정
변하는 부분만 하위 클래스에 위임
공통 흐름 = Template
변경 지점 = Hook Method
추상 클래스 (Template 정의)
final:흐름 변경 절대 불가
abstract:하위 클래스 구현 강제
public abstract class PaymentProcess { // 템플릿 메서드
public final void process() {
validate();
pay();
notifyUser();
}
protected abstract void pay();
protected void validate() { System.out.println("결제 검증"); }
protected void notifyUser() { System.out.println("결제 완료 알림"); }
}
Client에서의 사용
public class CardPayment extends PaymentProcess {
@Override
protected void pay() {
System.out.println("카드 결제");
}
}
public class BankPayment extends PaymentProcess {
@Override
protected void pay() {
System.out.println("계좌 이체");
}
}
public class Client {
public static void main(String[] args) {
PaymentProcess payment = new CardPayment();
payment.process();
}
}
구조의 핵심 포인트
1) 알고리즘의 흐름을 강제 시킨다.
2) 중복을 제거한다.(공통로직은 상위에서 한번만)
3) 제한된 확장 (정해진곳만 변경가능)
템플릿 메서드 패턴을 쓰는 결정적 기준
다음 조건이면 Template Method 적합
- 알고리즘 순서가 절대 바뀌면 안 될 때
- 공통 흐름이 명확할 때
- 보안 / 결제 / 트랜잭션 / 라이프사이클
Java & Spring 실사용 근거
- Spring AbstractController
- Spring AbstractTemplateView
- JUnit setUp → test → tearDown
- Servlet service() 라이프사이클
한 문장으로 끝내는 요약
“템플릿 메서드 패턴은 알고리즘의 흐름을 상위 클래스에서 고정하고,
일부 단계만 하위 클래스에 위임해
구조 안정성과 코드 중복 제거를 동시에 달성하는 패턴입니다.”
반응형
'개발 공부' 카테고리의 다른 글
| Template Pattern, Strategy Pattern 패턴 (0) | 2026.01.23 |
|---|---|
| [Next.js] dynamicImport?? 란 선 구현 후 배움 (1) | 2025.11.18 |
| [supabse] custom schema 사용시 발생 에러 error code name PGRST106 (0) | 2025.05.21 |
| [grafana] 대시보드 별 유저 권한 부여 하는 법 정리 (1) | 2024.10.23 |
| [grafana] export csv 한글깨짐 현상 해결법 (0) | 2024.10.17 |
Comments
