[Spring 2.5] DI, IoC 란?
by 무작정 개발2022.03.21(60일 차_월요일)
Spring Framework에서는 DI, IoC, AOP 이 3가지는 핵심 도구이다.
이번 글에서는 DI (의존성 주입) , IoC(제어의 역전)에 대해 정리할 것이다.
▶ DI (Dependency Injection) - 의존성 주입
DI (의존성 주입)란 스프링은 객체의 의존성을 의존성 주입을 통해 관리한다.
객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입시켜주는 방식이다.
DI (의존성 주입)를 통해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
의존성을 제거하는 클래스 구현 방법으로 각 클래스가 인터페이스를 기반으로 호출하게 하고, 의존성 주입을
통해 객체 생성을 추상화하는 방법이 있는데 이 방법이 DI(의존성 주입)이다.
(DI) 의존성 주입 방법에는
생성자 기반 의존성 주입 (Constructor Injection), Setter 기반 의존성 주입 (Setter Injection)이 있다.
일단 A라는 객체에서 B, C라는 객체를 이용할 때 2가지 방법이 있다.
방법 1은 A객체가 B와 C 객체를 new 생성자를 통해 직접 생성하는 방법이다.
방법 2는 외부에서 생성된 객체를 setter()를 통해 사용하는 방법이다.
두 번째 방법은 A객체에서 B, C 객체를 사용(의존)할 때 A객체에서 직접 생성하는 것이 아니라
외부 (IOC컨테이너)에서 생성된 B, C 객체를 조립(주입)시켜 setter 혹은 생성자를 통해 사용하는 방식이다.
스프링에서는 객체를 Bean이라 부르고, 프로젝트가 실행될 때 사용자가 Bean으로 관리하는
객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을
스프링에서는 Bean 컨테이너라고 부른다.
▶ IoC (Inversion of Control) - 제어의 역전
IoC (Inversion of Control) 란 "제어의 역전"이라는 의미로, 말 그대로 메서드나 객체의
호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
쉽게 말하면
객체를 필요할 때 생성해서 사용하는 것이 아니라 미리 생성해 놓고 꺼내어 사용하는 방식
IoC는 제어의 역전이라고 말하며, 간단히 말해 "제어의 흐름을 바꾼다"라고 한다.
객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여
가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.
기존에는 다음과 같은 순서로 객체가 만들어지고 실행되었다.
객체 생성 -> 의존성 객체 생성(클래스 내부에서 생성) -> 의존성 객체 메서드 호출
스프링(spring)에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.
(1) 객체 생성
(2) 의존성 객체 주입
- 스스로 만드는 것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입
(3) 의존성 객체 메서드 호출
스프링(Spring)이 모든 의존성 객체를 스프링이 실행될 때 다 만들어주고 필요한 곳에 주입시킴으로써
Bean들은 싱글턴 패턴의 특징을 가지며,
제어의 흐름을 사용자가 컨트롤하는 것이 아니라 스프링(Spring)에게 맡겨 작업을 처리하게 된다.
[참고 사이트]
https://velog.io/@gillog/Spring-DIDependency-Injection
+ 스프링(Spring)을 배우면서 계속 글을 수정할 예정~
스프링 첫날이라 아직 개념이 많이 부족하여 다른 글을 참고를 많이 했지만 꾸준히 공부를 하며 글을 정리할 예정이다.
'Back-End > Spring Legacy' 카테고리의 다른 글
[Spring 2.5] 게시판 CRUD 만들기 (0) | 2022.03.23 |
---|---|
[Spring 2.5] Annotation (어노테이션) (0) | 2022.03.23 |
[Spring 2.5] AbstractWizardFormController, MultiTestController (0) | 2022.03.22 |
[Spring 2.5] SimpleFormController (0) | 2022.03.22 |
[Spring 2.5] spring2.5 설치&초기 세팅, JRE(JDK) 변경 방법 (0) | 2022.03.21 |
블로그의 정보
무작정 개발
무작정 개발