패스잇
백엔드 개발 · 기초

Spring의 IoC(Inversion of Control)와 DI(Dependency Injection)의 개념과 장점에 대해 설명해주세요.

힌트 · 객체 생성과 의존성 관리의 책임이 어디에 있는지 생각해보세요.

제어의 역전의존성 주입결합도 감소유연성 증가테스트 용이성

모범답안

IoC(제어의 역전)는 객체의 생성 및 생명 주기 관리에 대한 제어 권한이 개발자가 아닌 컨테이너에게 넘어가는 것을 의미합니다. 기존에는 개발자가 직접 객체를 생성하고 관리했지만, IoC 컨테이너가 이를 대신 처리해주는 것이죠.

DI(의존성 주입)는 IoC를 구현하는 구체적인 방법 중 하나입니다. 객체가 필요로 하는 의존성을 직접 생성하는 대신, 컨테이너로부터 주입받는 방식으로 구현됩니다.

IoC/DI를 사용하면 다음과 같은 장점이 있습니다.

  • 결합도 감소: 객체 간의 의존성이 줄어들어 코드 변경에 따른 영향이 최소화됩니다.
  • 유연성 증가: 객체 간의 관계가 느슨해져 코드 재사용성이 높아지고, 다양한 환경에 쉽게 적용할 수 있습니다.
  • 테스트 용이성: 의존성을 쉽게 Mock 객체로 대체할 수 있어 단위 테스트가 용이해집니다.

예를 들어, OrderServiceProductRepository에 의존한다면, 직접 new ProductRepository()를 호출하는 대신, Spring 컨테이너가 ProductRepository 인스턴스를 OrderService에 주입해주는 방식입니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 Java / Spring 면접 질문

← Java / Spring 면접 질문 전체 보기