Hello World!

[Spring Basic] IoC와 DI

by PyTong

BE

https://www.inflearn.com/course/스프링-핵심-원리-기본편

IoC - 제어의 역전

  • 기존 프로그램들은 개발자의 의지에 따라 구현 객체를 생성하고, 연결하고 실행했다.
  • 즉 프로그램의 제어 흐름을 개발자가 직접 조종했다. 
  • 하지만 스프링에선 해당 객체의 생성과 연결, 실행을 개발자가 아닌 스프링이 담당한다.

프레임 워크 vs 라이브러리

  • 프레임워크는 내가 작성한 코드를 제어하고, 대신 실행하면 프레임워크
  • 내가 작성한 코드를 직접 제어의 흐름을 제어하면 라이브러리

https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html - 스프링 공식 Doc 그림은 정말 못생겼다. 3.2x 랑 6.1.x 랑 그림이 같다.

위의 그림처럼 나의 비즈니스 오브젝트(내가 구현한 객체)와 Configuration 메타 데이터를 가지고 스프링 이리저리 짬뽕해서

스프링 서버가 생성된다.


DI - 의존관계 주입

스프링이 DI를 하는 방법에는 네 가지가 있다.

  1. ⭐️ 생성자 주입 ⭐️
  2. Setter 주입
  3. 필드 주입
  4. 일반 메서드 주입

 

생성자 주입

  • 생성자 호출 시점에 딱 1번만 호출되는게 보장이 된다.
  • 불변, 필수 의존 관계에 사용

 

Setter 주입

  • 선택, 변경 가능성이 있는 의존 관계에 사용(나중에 바꿀 수 있으니)
  • 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법

필드 주입

@Autowired private MemberRepository memberRepository;
@Autowired private DiscountPolicy discountPolicy;

옛날에 많이 썼다. 쓰지말자

일반 메서드 주입

  • 한번에 여러 필드을 주입 할 수 있다.
  • 쓰지 말자

 

-> 어차피 @Autowired 등의 컴포넌트 스캔을 사용하면 생성자 주입 편하기도 하고 안전하다.

 

다음 강의 내용을 기반으로 정리했습니다.
https://www.inflearn.com/course/스프링-핵심-원리-기본편

 

블로그의 정보

PyTong

PyTong

활동하기