본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 2. · 18 Views
Template Method Pattern 기초부터 심화까지
템플릿 메서드 패턴은 알고리즘의 구조를 정의하고 일부 단계를 서브클래스에서 구현하도록 하는 디자인 패턴입니다. 코드 재사용성을 높이고 일관된 알고리즘 구조를 유지할 수 있습니다.
들어가며
이 글에서는 Template Method Pattern 기초부터 심화까지에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 템플릿_메서드_패턴_기본_구조
- CSV_데이터_처리_구현
- JSON_데이터_처리_구현
- 훅_메서드_활용
- 로깅_기능이_추가된_프로세서
- 조건부_실행_템플릿
- 게임_캐릭터_행동_패턴
- 전사_캐릭터_구현
- 마법사_캐릭터_구현
- 데이터_검증_파이프라인
- 이메일_검증기_구현
- 템플릿_메서드_패턴의_장점
1. 템플릿 메서드 패턴 기본 구조
개요
추상 클래스에서 알고리즘의 뼈대를 정의하고, 구체적인 단계는 추상 메서드로 선언합니다.
코드 예제
abstract class DataProcessor {
process(): void {
this.readData();
this.processData();
this.saveData();
}
abstract readData(): void;
abstract processData(): void;
abstract saveData(): void;
}
설명
process() 메서드가 템플릿 메서드로, 알고리즘의 전체 흐름을 정의합니다. 각 단계는 서브클래스에서 구현합니다.
2. CSV 데이터 처리 구현
개요
DataProcessor를 상속받아 CSV 파일을 처리하는 구체적인 클래스를 만듭니다.
코드 예제
class CSVProcessor extends DataProcessor {
readData(): void {
console.log('CSV 파일 읽기');
}
processData(): void {
console.log('CSV 데이터 파싱');
}
saveData(): void {
console.log('CSV 결과 저장');
}
}
설명
추상 클래스의 각 단계를 CSV 파일에 맞게 구체적으로 구현합니다.
3. JSON 데이터 처리 구현
개요
같은 템플릿을 사용하면서 JSON 데이터 처리에 맞게 구현합니다.
코드 예제
class JSONProcessor extends DataProcessor {
readData(): void {
console.log('JSON 파일 읽기');
}
processData(): void {
console.log('JSON 데이터 파싱');
}
saveData(): void {
console.log('JSON 결과 저장');
}
}
설명
동일한 알고리즘 구조를 유지하면서 JSON 처리 방식만 변경할 수 있습니다.
4. 훅 메서드 활용
개요
선택적으로 오버라이드할 수 있는 훅 메서드를 추가하여 유연성을 높입니다.
코드 예제
abstract class FlexibleProcessor {
process(): void {
this.beforeProcess();
this.readData();
this.processData();
this.afterProcess();
}
beforeProcess(): void {}
afterProcess(): void {}
abstract readData(): void;
abstract processData(): void;
}
설명
빈 구현을 제공하는 훅 메서드로 필요한 경우에만 오버라이드하여 사용할 수 있습니다.
5. 로깅 기능이 추가된 프로세서
개요
훅 메서드를 활용하여 전처리와 후처리 로직을 추가합니다.
코드 예제
class LoggedCSVProcessor extends FlexibleProcessor {
beforeProcess(): void {
console.log('처리 시작:', new Date());
}
readData(): void { console.log('CSV 읽기'); }
processData(): void { console.log('CSV 처리'); }
afterProcess(): void {
console.log('처리 완료:', new Date());
}
}
설명
필수 메서드는 구현하고, 훅 메서드는 필요에 따라 선택적으로 구현합니다.
6. 조건부 실행 템플릿
개요
템플릿 메서드 내에서 조건에 따라 실행 흐름을 제어할 수 있습니다.
코드 예제
abstract class ConditionalProcessor {
process(): void {
this.readData();
if (this.shouldValidate()) {
this.validate();
}
this.processData();
}
shouldValidate(): boolean { return true; }
validate(): void { console.log('검증 수행'); }
abstract readData(): void;
abstract processData(): void;
}
설명
훅 메서드가 boolean을 반환하여 특정 단계의 실행 여부를 제어합니다.
7. 게임 캐릭터 행동 패턴
개요
게임에서 캐릭터의 공격 패턴을 템플릿 메서드로 구현하는 실용적인 예제입니다.
코드 예제
abstract class Character {
attack(): void {
this.prepareWeapon();
this.performAttack();
this.cooldown();
}
abstract prepareWeapon(): void;
abstract performAttack(): void;
cooldown(): void { console.log('재사용 대기'); }
}
설명
모든 캐릭터가 공통적으로 따르는 공격 순서를 정의하되, 무기 준비와 공격 방식은 각자 다르게 구현합니다.
8. 전사 캐릭터 구현
개요
Character 템플릿을 상속받아 전사의 공격 패턴을 구현합니다.
코드 예제
class Warrior extends Character {
prepareWeapon(): void {
console.log('검을 휘두를 준비');
}
performAttack(): void {
console.log('강력한 검 공격!');
}
}
const warrior = new Warrior();
warrior.attack();
설명
전사만의 특징적인 공격 방식을 구현하면서 전체 공격 흐름은 부모 클래스의 템플릿을 따릅니다.
9. 마법사 캐릭터 구현
개요
같은 템플릿으로 마법사의 다른 공격 스타일을 구현합니다.
코드 예제
class Mage extends Character {
prepareWeapon(): void {
console.log('마나 집중');
}
performAttack(): void {
console.log('파이어볼 발사!');
}
}
const mage = new Mage();
mage.attack();
설명
마법사는 전사와 다른 방식으로 공격하지만, 준비-공격-쿨다운의 흐름은 동일하게 유지됩니다.
10. 데이터 검증 파이프라인
개요
여러 단계의 검증 과정을 템플릿 메서드로 구조화합니다.
코드 예제
abstract class Validator<T> {
validate(data: T): boolean {
if (!this.checkFormat(data)) return false;
if (!this.checkBusiness(data)) return false;
this.log(data);
return true;
}
abstract checkFormat(data: T): boolean;
abstract checkBusiness(data: T): boolean;
log(data: T): void { console.log('검증 완료'); }
}
설명
형식 검증, 비즈니스 규칙 검증, 로깅의 순서를 템플릿으로 정의하여 일관된 검증 프로세스를 보장합니다.
11. 이메일 검증기 구현
개요
Validator 템플릿을 사용하여 이메일 검증 로직을 구현합니다.
코드 예제
class EmailValidator extends Validator<string> {
checkFormat(email: string): boolean {
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
}
checkBusiness(email: string): boolean {
return !email.endsWith('@temp.com');
}
}
console.log(new EmailValidator().validate('test@example.com'));
설명
이메일의 형식과 비즈니스 규칙을 각각 검증하며, 전체 검증 흐름은 부모 클래스가 관리합니다.
12. 템플릿 메서드 패턴의 장점
개요
코드 재사용과 확장성을 높이는 템플릿 메서드 패턴의 핵심 이점을 정리합니다.
코드 예제
// ✅ 장점:
// 1. 중복 코드 제거 (알고리즘 구조는 한 곳에)
// 2. 확장에 열려있고 수정에 닫혀있음 (OCP 원칙)
// 3. 일관된 알고리즘 실행 보장
// 4. 서브클래스는 세부사항만 구현
abstract class BaseClass {
templateMethod(): void { /* 재사용 가능한 구조 */ }
abstract customStep(): void; /* 확장 포인트 */
}
설명
템플릿 메서드 패턴은 변하지 않는 부분과 변하는 부분을 분리하여 코드의 유지보수성과 확장성을 높입니다.
마치며
이번 글에서는 Template Method Pattern 기초부터 심화까지에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#TypeScript #DesignPattern #TemplateMethod #OOP #AbstractClass
이 카드뉴스가 포함된 코스
댓글 (0)
함께 보면 좋은 카드 뉴스
마이크로서비스 배포 완벽 가이드
Kubernetes를 활용한 마이크로서비스 배포의 핵심 개념부터 실전 운영까지, 초급 개발자도 쉽게 따라할 수 있는 완벽 가이드입니다. 실무에서 바로 적용 가능한 배포 전략과 노하우를 담았습니다.
Application Load Balancer 완벽 가이드
AWS의 Application Load Balancer를 처음 배우는 개발자를 위한 실전 가이드입니다. ALB 생성부터 ECS 연동, 헬스 체크, HTTPS 설정까지 실무에 필요한 모든 내용을 다룹니다. 초급 개발자도 쉽게 따라할 수 있도록 단계별로 설명합니다.
고객 상담 AI 시스템 완벽 구축 가이드
AWS Bedrock Agent와 Knowledge Base를 활용하여 실시간 고객 상담 AI 시스템을 구축하는 방법을 단계별로 학습합니다. RAG 기반 지식 검색부터 Guardrails 안전 장치, 프론트엔드 연동까지 실무에 바로 적용 가능한 완전한 시스템을 만들어봅니다.
에러 처리와 폴백 완벽 가이드
AWS API 호출 시 발생하는 에러를 처리하고 폴백 전략을 구현하는 방법을 다룹니다. ThrottlingException부터 서킷 브레이커 패턴까지, 실전에서 바로 활용할 수 있는 안정적인 에러 처리 기법을 배웁니다.
AWS Bedrock 인용과 출처 표시 완벽 가이드
AWS Bedrock의 Citation 기능을 활용하여 AI 응답의 신뢰도를 높이는 방법을 배웁니다. 출처 추출부터 UI 표시, 검증까지 실무에서 바로 사용할 수 있는 완전한 가이드입니다.