IoC(Inversion of Controller)
- IoC : "제어의 역전"(= 역제어)라는 의미로, 메소드나 객체의 호출 작업을 개발자가 하지 않고, 외부에서 호출하는 것을 의미한다.
- 객체의 의존성을 역전시켜 객체간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하며, 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있다.
- 순제어 : 자바를 처음 배울 때, 사용했던
Member member = new Member();
가 개발자가 직접 객체를 호출하는 순제어 코드이다.
- 역제어 : 스프링 컨테이너가 빈으로 등록한 객체들을 생성 및 관리한다.
@Component
, @Bean
를 사용해서 빈으로 등록할 수 있다.
- xml 파일에서는
<bean>
태그를 사용하여 빈으로 등록할 수 있다.
DI(Dependency Injection)
- DI : "의존성 주입" 말 그대로 의존 관계를 가지고 있는 객체에 자동으로 의존 관계를 주입시켜 준다.
- 다음과 같이 A라는 객체는 B와 C를 주입 받아야 된다고 할 때,
- 첫번째 방법은 new(순제어)를 통해 B, C 객체를 생성하여 A객체에 주입해주는 방법이다.
- 두번째 방법은 외부에서 B, C 객체를 생성하여 주입해주는 방법이다.
- 의존성 주입 방법에는 생성자 주입 방법과 setter 주입 방법이 있다.
- 생성자 주입 방법은 변경이 불필요한 객체를 주입할 때 사용한다.
- setter 주입 방법은 변경이 자주 일어나는 객체를 주입할 때 사용한다.
DI의 장점
- 의존성이 줄어든다.
- 재사용성이 높은 코드가 도니다.
- 테스트하기 좋은 코드가 된다.
- 가독성이 높아진다.
두 방법 중에 생성자 주입을 사용하는 것이 좋다.
생성자 주입을 사용하면 아래와 같은 장점이 있다.
- 객체의 불변성을 확보할 수 있다.
- 테스트 코드의 작성이 용이해진다.
- final 키워드를 사용할 수 있고, Lombok과의 결합을 통해 코드를 간결하게 작성할 수 있다.
- 순환 참조 에러를 애플리케이션 구동(객체의 생성) 시점에 파악하여 방지할 수 있다.
참고
공부해서 남 주자
망나니개발자 <-추천
의존관계 주입(Dependency Injection) 쉽게 이해하기