hayu's 개발 일지

[TIL]240302 IoC / DI 본문

프레임워크/spring

[TIL]240302 IoC / DI

hayu00 2024. 3. 2. 21:44

IoC 란?

- IoC 는 제어의 역전이다.

- 프로그램의 제어 흐름 구조가 뒤바뀌는 것을 말한다. 즉, 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조를 거꾸로 뒤집는 것이다. 

- 제어권을 상위 템플릿 메소드에 넘기고 자신은 필요할 때 호출되어 사용하도록 한다는 개념이다. 

-> 예를 들어 스프링 컨테이너에서 직접 객체를 생성하여 해당 객체의 주입 시키는 것을 말한다.

 

IoC 의 장점

- 객체간의 결합도를 낮춘다.

- 유연한 코드 작성이 가능하다.

- 가독성이 증가한다.

- 코드 중복이 방지된다.

- 유지 보수가 편하다.

 

- IoC 를 적용하면 객체를 클래스 내부에서 직접 생성하여 사용하지 않고 미리 생성해놓은 객체를 주입받아 사용하면 된다. 

-> 프로그램의 제어 흐름을 직접 제어하는 것이 아닌 외부에서 관리한다. 

 

DI 란?

- 의존 관계 주입(의존성 주입)을 말한다.

- 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시켜주는 방식이다. 

 

의존성이란?

- 의존대상이 변하면 그것이 영향을 미치는 것이다. 의존대상의 기능이 추가되거나 변경되면 그 영향이 전달되는 것을 말한다. 

 - 여기서 의존성을 주입받게 되면 의존대상을 마음대로 갈아끼울 수 있어 의존도와 결합도가 낮아진다. 

 

DI는 세가지 방식이 있다. 

- 생성자 주입

- Setter 주입

- 필드 주입

 

 

DI의 장점

- 불변성을 활용할 수 있다.(final 로 선언 가능)

- NullPointerException 발생을 막는다. 

-> 객체가 생성되는 시점에 빈을 주입한다. 생성기에 의존성 없이는 생성 불가능하기 때문에 일부러 nill을 넣지 않는 한 NullPointerException 이 발생하지 않는다.