Back-End/Study

Spring IoC(제어의 역전) / DI(의존성 주입)

yeonx 2022. 11. 24. 21:49
728x90

1. Inversion Of Control (IOC)

  • 프로그램의 흐름 (객체의 생성, 생명주기)을 개발자가 직접 제어하는 것이 아닌 외부에서 제어 및 관리를 해주는 것을 말한다.

 

2. IOC Container

  • 스프링에서는 Application을 구성하는 Bean을 관리하기 위하여 IOC개념을 이용, Spring IOC Container가 객체를 관리함으로써 DI(의존성 주입), AOP(관점 지향 프로그래밍)이 가능해지게 된다.
  • Spring IOC Container가 주도권을 가져감으로써 객체의 관리, 의존 관계의 결정 및 설정 등의 역할을 맡게 된다.

 

3. Dependency Injection (DI)

  • 객체의 의존성을 개발자가 아닌 외부 (IOC Container)에서 주입함으로써 객체간의 결합을 약하게 해주며 유지보수가 좋은 코드를 만들어준다.
  • 스프링에서는 스프링 컨테이너가 각 클래스의 의존관계를 Bean설정 정보를 바탕으로 자동으로 결정 및 연결해준다.

 

4. 강한 결합과 느슨한 결합

  • 강한 결합 : 객체 내부에서 다른 객체를 new를 통해 생성하는 것을 강한 결합도를 갖는다고 한다.
  • 느슨한 결합 :외부에서 생성된 객체를 인터페이스를 통해 주입받는다. 외부에서 객체를 주입받게 되면 런타임시에 의존관계가 결정, 유연한 구조를 가진다.

 

5. 의존성 주입의 방법

  1. 생성자 주입
    • 생성자를 이용하여 의존성을 주입하는 방법
    • 스프링에서 가장 권장하는 방법
  2. 필드 주입
    • 일반적이고 쉬운 방법이지만 Runtime시에 순환참조 문제가 발생할 수 있다.
  3. Setter 주입
    • 생성할 때 의존성을 주입하는 것이 아닌 원하는 때에 함수를 호출, 의존성을 주입할 수 있다.

 

 

출처 : https://velog.io/@dplo1514/Spring-IOC%EC%A0%9C%EC%96%B4%EC%9D%98-%EC%97%AD%EC%A0%84-DI-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85

'Back-End > Study' 카테고리의 다른 글

[Jenkins] Github연동  (0) 2023.08.10
[Jenkins] 설치 및 설정  (0) 2023.08.10
Spring과 Spring Boot  (0) 2022.11.24
[Mac OS] Redis 설치  (0) 2022.09.29
[Mac M2] UTM위에 우분투 설치  (0) 2022.09.25