[스프링부트] IoC, DIP

이준기·2022년 7월 29일
0

IoC 란?


IoC(Inversion of Control)란 제어의 "역전"으로, 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것이다.

외부(스프링 빈 !)에서 주입된(DI !) 객체들을 관리함으로써 응집도를 높이고 결합도를 낮추는 객체지향의 원칙을 지킬 수 있게 된다.

스프링 빈?

Spring IoC 컨테이너가 관리하는 자바 객체를 Bean 이라고 한다. 객체들을 빈에 등록하면 빈이 객체들을 관리해준다.

빈에 등록?

  • 빈 설정파일에 직접 빈을 등록
    -> @Configuration를 붙인 자바 설정파일에서 @Bean을 이용하여 직접 빈을 정의하여 등록한다.
  • Component Scanning
    -> @ComponentScan 이 포함되어있는 애노테이션(ex. @Controller, @Service, ...)을 사용하여 빈에 등록한다.

DI ?

DI(Dependency Injection)란 외부에서 의존성을 주입받는 것을 의미한다. 의존성 주입에는 여러 방법이 있는데,

  • 필드 주입
    • 외부 의존성 주입을 받지 않고 인스턴스를 생성하여 Bean에 등록.
    • 추상체가 아닌 구현체를 직접 생성하기 때문에 변화에 민감해짐
  • Setter 주입
    • 인스턴스 생성 시 set()을 돌려주지 않으면 null값을 가져 exception이 터질 수 있다. 런타임시에 문제 해결 불가능...
  • 생성자 주입
    • 추천! 외부로 부터 주입 받기 때문에 변화에 능동적으로 대처할 수 있고, 구현체에 의존하지 않고 사용할 수 있는 장점이 있다.
    • 또한, final로 생성된 불변객체를 사용함으로서, 인스턴스의 복제, 비교가 쉬워지며, 한번 생성한 인스턴스에 대한 변경을 금지시킴으로서 안전한 객체사용이 가능해짐!

DIP 란?


DIP(Dependency Inversion Principle)란 의존 역전 원칙으로, 상위 레벨의 모듈이 절대 하위 레벨 모듈에 의존하지 않으며, 둘 다 추상화에 의존해야 한다는 원칙이다.

DI 기법으로 추상화에 의존하도록 하여, DIP를 만족함으로써 클래스 간 결합도를 낮출 수 있다.

Reference


https://www.youtube.com/watch?v=8lp_nHicYd4

https://velog.io/@dong_geon_kim/JAVA-4-DIP%EC%99%80-DI-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0

profile
Hongik CE

0개의 댓글