본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 4. · 29 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)
함께 보면 좋은 카드 뉴스
UX와 협업 패턴 완벽 가이드
AI 에이전트와 사용자 간의 효과적인 협업을 위한 UX 패턴을 다룹니다. 프롬프트 핸드오프부터 인터럽트 처리까지, 현대적인 에이전트 시스템 설계의 핵심을 배웁니다.
자가 치유 및 재시도 패턴 완벽 가이드
AI 에이전트와 분산 시스템에서 필수적인 자가 치유 패턴을 다룹니다. 에러 감지부터 서킷 브레이커까지, 시스템을 스스로 복구하는 탄력적인 코드 작성법을 배워봅니다.
Feedback Loops 컴파일러와 CI/CD 완벽 가이드
컴파일러 피드백 루프부터 CI/CD 파이프라인, 테스트 자동화, 자가 치유 빌드까지 현대 개발 워크플로우의 핵심을 다룹니다. 초급 개발자도 쉽게 이해할 수 있도록 실무 예제와 함께 설명합니다.
실전 MCP 통합 프로젝트 완벽 가이드
Model Context Protocol을 활용한 실전 통합 프로젝트를 처음부터 끝까지 구축하는 방법을 다룹니다. 아키텍처 설계부터 멀티 서버 통합, 모니터링, 배포까지 운영 레벨의 MCP 시스템을 구축하는 노하우를 담았습니다.
MCP 동적 도구 업데이트 완벽 가이드
AI 에이전트의 도구를 런타임에 동적으로 로딩하고 관리하는 방법을 알아봅니다. 플러그인 시스템 설계부터 핫 리로딩, 보안까지 실무에서 바로 적용할 수 있는 내용을 다룹니다.