백엔드 개발 · 기초
Spring의 IoC(Inversion of Control)와 DI(Dependency Injection)의 개념과 장점에 대해 설명해주세요.
힌트 · 객체 생성과 의존성 관리의 책임이 어디에 있는지 생각해보세요.
제어의 역전의존성 주입결합도 감소유연성 증가테스트 용이성
모범답안
IoC(제어의 역전)는 객체의 생성 및 생명 주기 관리에 대한 제어 권한이 개발자가 아닌 컨테이너에게 넘어가는 것을 의미합니다. 기존에는 개발자가 직접 객체를 생성하고 관리했지만, IoC 컨테이너가 이를 대신 처리해주는 것이죠.
DI(의존성 주입)는 IoC를 구현하는 구체적인 방법 중 하나입니다. 객체가 필요로 하는 의존성을 직접 생성하는 대신, 컨테이너로부터 주입받는 방식으로 구현됩니다.
IoC/DI를 사용하면 다음과 같은 장점이 있습니다.
- 결합도 감소: 객체 간의 의존성이 줄어들어 코드 변경에 따른 영향이 최소화됩니다.
- 유연성 증가: 객체 간의 관계가 느슨해져 코드 재사용성이 높아지고, 다양한 환경에 쉽게 적용할 수 있습니다.
- 테스트 용이성: 의존성을 쉽게 Mock 객체로 대체할 수 있어 단위 테스트가 용이해집니다.
예를 들어, OrderService가 ProductRepository에 의존한다면, 직접 new ProductRepository()를 호출하는 대신, Spring 컨테이너가 ProductRepository 인스턴스를 OrderService에 주입해주는 방식입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.