본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 4. · 10 Views
Productivity 디자인 패턴 생산성 향상
코드의 생산성과 유지보수성을 높이는 실용적인 디자인 패턴들을 소개합니다. Builder, Factory, Strategy 등 실무에서 자주 사용되는 패턴들을 간단한 예제로 배워봅니다.
들어가며
이 글에서는 Productivity 디자인 패턴 생산성 향상에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Builder_Pattern
- Factory_Pattern
- Strategy_Pattern
- Singleton_Pattern
- Observer_Pattern
- Decorator_Pattern
- Repository_Pattern
- Chain_of_Responsibility
- Command_Pattern
- Adapter_Pattern
1. Builder Pattern
개요
복잡한 객체를 단계별로 생성하는 패턴입니다. 생성자의 파라미터가 많을 때 가독성을 높여줍니다.
코드 예제
class UserBuilder {
private user = { name: '', age: 0, email: '' };
setName(name: string) { this.user.name = name; return this; }
setAge(age: number) { this.user.age = age; return this; }
setEmail(email: string) { this.user.email = email; return this; }
build() { return this.user; }
}
const user = new UserBuilder().setName('김개발').setAge(30).setEmail('dev@example.com').build();
설명
메서드 체이닝으로 객체를 단계별로 구성하고, build()로 최종 객체를 반환합니다. 파라미터 순서를 기억할 필요가 없어집니다.
2. Factory Pattern
개요
객체 생성 로직을 캡슐화하여 조건에 따라 다른 객체를 생성합니다. 코드 중복을 줄이고 확장성을 높입니다.
코드 예제
interface Logger { log(msg: string): void; }
class ConsoleLogger implements Logger {
log(msg: string) { console.log(`Console: ${msg}`); }
}
class FileLogger implements Logger {
log(msg: string) { console.log(`File: ${msg}`); }
}
function createLogger(type: 'console' | 'file'): Logger {
return type === 'console' ? new ConsoleLogger() : new FileLogger();
}
설명
createLogger 함수가 타입에 따라 적절한 Logger 객체를 생성합니다. 새로운 로거 타입 추가가 쉬워집니다.
3. Strategy Pattern
개요
알고리즘을 캡슐화하고 런타임에 교체 가능하게 만드는 패턴입니다. if-else 분기를 줄이고 유연성을 높입니다.
코드 예제
interface PaymentStrategy {
pay(amount: number): void;
}
class CreditCard implements PaymentStrategy {
pay(amount: number) { console.log(`카드 결제: ${amount}원`); }
}
class KakaoPay implements PaymentStrategy {
pay(amount: number) { console.log(`카카오페이 결제: ${amount}원`); }
}
class Checkout {
constructor(private strategy: PaymentStrategy) {}
process(amount: number) { this.strategy.pay(amount); }
}
설명
결제 방식을 전략 객체로 분리하여 런타임에 교체할 수 있습니다. 새로운 결제 방식 추가가 간단해집니다.
4. Singleton Pattern
개요
클래스의 인스턴스를 하나만 생성하고 전역적으로 접근 가능하게 합니다. 설정, 캐시 등에 유용합니다.
코드 예제
class ConfigManager {
private static instance: ConfigManager;
private config = { apiUrl: '', timeout: 3000 };
private constructor() {}
static getInstance() {
if (!this.instance) this.instance = new ConfigManager();
return this.instance;
}
getConfig() { return this.config; }
}
const config = ConfigManager.getInstance();
설명
private constructor로 외부 생성을 막고, getInstance()로 단일 인스턴스를 보장합니다. 앱 전체에서 동일한 설정을 공유합니다.
5. Observer Pattern
개요
객체의 상태 변화를 관찰자들에게 자동으로 알리는 패턴입니다. 이벤트 기반 프로그래밍의 핵심입니다.
코드 예제
class Subject {
private observers: Function[] = [];
subscribe(fn: Function) { this.observers.push(fn); }
notify(data: any) { this.observers.forEach(fn => fn(data)); }
}
const subject = new Subject();
subject.subscribe((data) => console.log(`구독자1: ${data}`));
subject.subscribe((data) => console.log(`구독자2: ${data}`));
subject.notify('새로운 데이터');
설명
Subject가 상태 변화를 notify하면 모든 구독자에게 자동으로 알림이 전달됩니다. React의 상태 관리와 유사합니다.
6. Decorator Pattern
개요
기존 객체에 새로운 기능을 동적으로 추가하는 패턴입니다. 상속 없이 기능을 확장할 수 있습니다.
코드 예제
function logger(target: any, key: string, descriptor: PropertyDescriptor) {
const original = descriptor.value;
descriptor.value = function(...args: any[]) {
console.log(`호출: ${key}, 인자: ${JSON.stringify(args)}`);
return original.apply(this, args);
};
}
class Calculator {
@logger
add(a: number, b: number) { return a + b; }
}
설명
@logger 데코레이터가 메서드 호출 전에 로그를 자동으로 출력합니다. 원본 코드를 수정하지 않고 기능을 추가합니다.
7. Repository Pattern
개요
데이터 접근 로직을 캡슐화하여 비즈니스 로직과 분리합니다. 테스트와 유지보수가 쉬워집니다.
코드 예제
interface Repository<T> {
findById(id: number): T | null;
save(item: T): void;
}
class UserRepository implements Repository<User> {
private users: User[] = [];
findById(id: number) { return this.users.find(u => u.id === id) || null; }
save(user: User) { this.users.push(user); }
}
type User = { id: number; name: string; };
설명
데이터베이스 접근 로직을 Repository로 분리하여 교체와 테스트가 용이합니다. 비즈니스 로직이 깔끔해집니다.
8. Chain of Responsibility
개요
요청을 처리할 수 있는 객체들의 체인을 만들어 순차적으로 처리합니다. 미들웨어 패턴에 활용됩니다.
코드 예제
abstract class Handler {
private next: Handler | null = null;
setNext(handler: Handler) { this.next = handler; return handler; }
handle(request: string) {
if (this.next) return this.next.handle(request);
}
}
class AuthHandler extends Handler {
handle(req: string) { console.log('인증 확인'); return super.handle(req); }
}
const auth = new AuthHandler();
설명
각 핸들러가 요청을 처리하고 다음 핸들러로 전달합니다. Express 미들웨어와 동일한 구조입니다.
9. Command Pattern
개요
요청을 객체로 캡슐화하여 실행 취소, 재실행 등을 구현합니다. UI 액션 관리에 유용합니다.
코드 예제
interface Command {
execute(): void;
undo(): void;
}
class AddTextCommand implements Command {
constructor(private text: string, private doc: string[]) {}
execute() { this.doc.push(this.text); }
undo() { this.doc.pop(); }
}
const doc: string[] = [];
const cmd = new AddTextCommand('Hello', doc);
cmd.execute();
cmd.undo();
설명
각 작업을 Command 객체로 만들어 실행과 취소를 관리합니다. Ctrl+Z 기능 구현에 적합합니다.
10. Adapter Pattern
개요
호환되지 않는 인터페이스를 연결해주는 패턴입니다. 외부 라이브러리 통합 시 유용합니다.
코드 예제
interface ModernAPI { getData(): Promise<any>; }
class LegacyAPI {
fetchData(callback: Function) { callback({ data: 'legacy' }); }
}
class APIAdapter implements ModernAPI {
constructor(private legacy: LegacyAPI) {}
getData() { return new Promise(resolve => this.legacy.fetchData(resolve)); }
}
const api = new APIAdapter(new LegacyAPI());
설명
콜백 기반의 레거시 API를 Promise 기반의 최신 API로 변환합니다. 기존 코드 수정 없이 통합 가능합니다.
마치며
이번 글에서는 Productivity 디자인 패턴 생산성 향상에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#TypeScript #DesignPatterns #Builder #Factory #Strategy
댓글 (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 표시, 검증까지 실무에서 바로 사용할 수 있는 완전한 가이드입니다.