ts
CHAPTER 29 / 34
읽기 약 2분
FUNCTION
TypeScript로 의존성 주입 구현
핵심 개념
의존성 주입(DI)으로 컴포넌트 간 결합도를 낮춥니다. 인터페이스로 추상화하고 구현체를 외부에서 주입합니다. 테스트 가능성과 유지보수성을 높이는 아키텍처 패턴입니다. DI를 지우며 의존성 결합이 어떻게 강해지는지 확인하십시오.
코드 분석
// interface ILogger { log(msg: string): void; }
// interface IStorage { save(key: string, value: any): void; get(key: string): any; }
class ConsoleLogger {
log(msg) { this._history = this._history || []; this._history.push(msg); }
getHistory() { return this._history || []; }
}
class MemoryStorage {
constructor() { this._data = {}; }
save(key, value) { this._data[key] = value; }
get(key) { return this._data[key]; }
}
// MissionService depends on ILogger & IStorage (주입)
class MissionService {
constructor(logger, storage) {
this._logger = logger;
this._storage = storage;
}
execute(mission) {
this._logger.log(`[EXECUTE] ${mission.name}`);
this._storage.save(mission.id, mission);
return `임무 ${mission.name} 실행 완료`;
}
getLogs() { return this._logger.getHistory(); }
}
const logger = new ConsoleLogger();
const storage = new MemoryStorage();
const service = new MissionService(logger, storage); // DI
const result = service.execute({ id: '001', name: 'SKYNET INFILTRATION' });
service.execute({ id: '002', name: 'CONNOR TERMINATION' });
[result, '--- LOGS ---', ...service.getLogs()].forEach(msg => {
const el = document.createElement('div');
el.style.color = msg.startsWith('---') ? '#555' : '#888';
el.style.fontSize = '11px'; el.style.marginBottom = '4px';
el.textContent = msg;
document.currentScript.parentElement.appendChild(el);
});AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
이 TS '의존성 주입' 코드에서 타입 에러·any 남용·타입 안전성 누락을 찾아 엄격한 타입으로 리팩토링해줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
'의존성 주입'를 실무에서 사용하는 패턴 3가지를 비교표로 보여주고 각각의 적합한 케이스를 알려줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
이 TS '의존성 주입' 관련 코드 전체의 타입 구조를 분석하고 제네릭·유틸리티 타입으로 개선할 포인트를 정리해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
TypeScript '의존성 주입'를 꼭 써야 하는지 개발 속도 vs 안전성 관점에서 솔직하게 평가해줘.
⭐ 이것만 기억하세요
TypeScript로 의존성 주입 구현은 이 3가지만 확실히 잡으세요
1.클래스 안에서 의존 객체를 직접 생성하면 테스트 시 목(mock)으로 교체할 수 없어서 단위 테스트가 불가능합니다
2.생성자 파라미터로 의존성을 받고, 컨테이너가 인터페이스 기반으로 구현체를 주입하면 결합도가 낮아집니다
3.다음 챕터에서 기존 유틸리티 타입을 직접 구현하는 제네릭 라이브러리를 만듭니다
공유하기
진행도 29 / 34