OPEN HYPER STEP
← 목록으로 (TypeScript)
TS · 29 / 34
ts
CHAPTER 29 / 34
읽기 약 2
FUNCTION

TypeScript로 의존성 주입 구현


핵심 개념

의존성 주입(DI)으로 컴포넌트 간 결합도를 낮춥니다. 인터페이스로 추상화하고 구현체를 외부에서 주입합니다. 테스트 가능성과 유지보수성을 높이는 아키텍처 패턴입니다. DI를 지우며 의존성 결합이 어떻게 강해지는지 확인하십시오.

코드 분석
TS📋 코드 (42줄)
// 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