IoC와 DI

수정이·2022년 6월 13일
0

Spring

목록 보기
5/16
post-thumbnail

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의 장점

  1. 의존성이 줄어든다.
  2. 재사용성이 높은 코드가 도니다.
  3. 테스트하기 좋은 코드가 된다.
  4. 가독성이 높아진다.

두 방법 중에 생성자 주입을 사용하는 것이 좋다.

생성자 주입을 사용하면 아래와 같은 장점이 있다.

  • 객체의 불변성을 확보할 수 있다.
  • 테스트 코드의 작성이 용이해진다.
  • final 키워드를 사용할 수 있고, Lombok과의 결합을 통해 코드를 간결하게 작성할 수 있다.
  • 순환 참조 에러를 애플리케이션 구동(객체의 생성) 시점에 파악하여 방지할 수 있다.

참고


공부해서 남 주자
망나니개발자 <-추천
의존관계 주입(Dependency Injection) 쉽게 이해하기

profile
공부는 꾸준히... 글쓰기도 꾸준히...

0개의 댓글