전체 목록
설계Medium#446

의존성 주입(DI)이 테스트와 유지보수에 유리한 이유를 설명해주세요.

#설계#DI#테스트#유지보수

답변 포인트

객체가 직접 의존 객체를 생성하는 방식과 외부에서 주입받는 방식을 비교해보세요.

정답 및 해설

빠른 요약

의존성 주입은 객체가 필요한 의존 객체를 직접 만들지 않고 외부에서 전달받는 설계 방식입니다. 핵심은 “무엇을 사용할지”와 “어떻게 만들지”를 분리하는 것입니다.

의존성 주입은 객체가 필요한 의존 객체를 직접 만들지 않고 외부에서 전달받는 설계 방식입니다. 핵심은 “무엇을 사용할지”와 “어떻게 만들지”를 분리하는 것입니다.

직접 생성 방식은 단순해 보이지만 결합도가 높습니다.

TypeScript
class OrderService {
  private payment = new StripePaymentClient();
}

이 구조에서는 테스트 중 실제 결제 클라이언트를 대체하기 어렵고, 결제 업체를 바꾸려면 OrderService 코드도 수정해야 합니다.

DI를 적용하면 의존성을 인터페이스나 추상 타입으로 받고, 실제 구현은 바깥에서 결정합니다.

TypeScript
class OrderService {
  constructor(private payment: PaymentClient) {}
}

테스트에서는 fake payment client를 넣어 성공/실패 상황을 쉽게 만들 수 있습니다. 운영에서는 Stripe 구현체를, 테스트에서는 InMemory 구현체를 사용할 수 있습니다.

DI는 코드가 조금 장황해질 수 있지만, 외부 시스템과 도메인 로직의 경계를 선명하게 만들어 유지보수에 유리합니다. 면접에서는 “DI는 테스트 편의성뿐 아니라 정책과 구현을 분리해 변경에 강한 구조를 만드는 도구”라고 설명하면 좋습니다.

관련 질문

같은 카테고리/태그 기준