IoC란?
IoC란 Inversion of Control의 약자입니다.
제어의 역전
이라는 뜻인데요!
- 프로그래머와 프레임워크의 주체가 바뀌었다고도 표현합니다.
- 일반적인 경우라면 개발자가 미리 정한 순서에 따라 생성, 실행을 주도하고 하였습니다. (개발자가 제어권을 가짐)
- IoC가 등장한 이후로는 객체의 생성, 생명주기, 관리까지 모든 객체에 대한 주도권을 프레임워크가 가져간 것입니다.
- IoC를 통해 Application을 구성하는 객체 간의 낮은 결합도를 유지할 수 있게 되었습니다.
- IoC의 역할을 담당하는 것이 Spring Container입니다.
- Spring Container를 IoC Container라고도 합니다.
Spring Container란?
- 스프링 컨테이너는 Spring Application 내에서 자바 객체를 관리하는 공간을 뜻합니다.
- 컨테이너의 역할은 의존성 주입(DI)을 통하여 어플리케이션을 구성하는 빈(Bean)들의 생명주기를 개발자 대신 관리합니다.
DI란?
DI는 Dependency Injection의 약자이며, 의존 관계 주입이라고 불립니다.
new로 객체를 직접 생성하는 것이 아닌, 외부에서 생성된 객체를 주입 받아서 사용하는 것입니다.
- IoC가 행해질 때, Spring 내부의 객체들 간의 관계를 관리할 때 사용하는 기법입니다.
- 강하게 결합된 Class를 분리하고 어플리케이션 실행 시점에 객체 간의 관계를 결정하여 주입합니다.
- 이를 통해 결합도를 낮추고 유연성을 확보하는 것이 DI를 사용하는 가장 큰 이유라고 할 수 있습니다.
그렇다면 생성자 주입을 사용해야 하는 이유는 무엇일까요?
- 객체의 불변성 확보입니다.
- 순환참조 에러 방지입니다.
오늘은 스프링에 포함되어 있는 IoC와 DI에 대해 설명해보았습니다.
질문은 환영입니다!