스프링에서 DI (의존성 주입) 를 사용하는 이유
① DI(의존성 주입)이란?
- DI란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.
- 즉, 각 객체간의 의존성을 스프링 컨테이너(Spring Container)가 자동으로 연결해주는 것으로, 개발자가 빈(Bean) 설정파일에 의존관계가 필요한 정보를 추가해주면, 스프링 컨테이너가 자동적으로 연결해 준다
- 의존성이란 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다.
- 의존성 주입은 IoC(Inversion of Control: 제어의 역전)원칙 하에 객체 간의 결합을 약하게 해주고 유지보수가 좋은 코드를 만들어 준다. 또한 의존성 주입은 개발자들이 객체를 생성하는 번거로움과 다양한 케이스를 고려하는 겨우를 줄이고, 변수 사용과 개발에 더욱이 집중할 수있게 해준다.
* IoC 란?
- IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
- 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.
- 스프링이 모든 의존성 객체를 스프링이 실행될때 다 만들어주고 필요한곳에 주입시켜줌으로써 Bean들은 싱글턴 패턴의 특징을 가지며, 제어의 흐름을 사용자가 컨트롤 하는 것이 아니라 스프링에게 맡겨 작업을 처리하게 된다.
흐름의 변화 상세 설명
더보기
기존의 순서는 아래와 같았다.
1. 객체 생성
2. 의존성 객체 생성 (클래스 내부에서 생성)
3. 의존성 객체 메소드 호출
하지만, 스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.
1.객체 생성
2. 의존성 객체 주입 (스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.)
3. 의존성 객체 메소드 호출
② DI(의존성 주입)를 사용하는 이유?
- 재사용성을 높여준다.
- 테스트에 용이하다.
- 코드를 단순화 시켜준다.
- 사용하는 이유를 파악하기 수월하고 코드가 읽기 쉬워지는 점이 있다.
- 종속성이 감소하기 때문에 변경에 민감하지 않다.
- 결합도(coupling)는 낮추면서 유연성과 확장성은 향상 시킬 수 있다.
- 객체간의 의존관계를 설정할 수 있다.
③ 스프링에서 의존성을 주입하는 방법
- 생성자에서 주입
- 필드에서 주입
- setter 에서 주입
참고 자료 https://velog.io/@gillog/Spring-DIDependency-Injection
'Coding > Spring' 카테고리의 다른 글
[22] 항해99 주특기 숙련주차 시험 Spring (0) | 2022.12.08 |
---|---|
[21] ORM, JPA, Spring Data JPA (0) | 2022.12.08 |
[19] 스프링 프레임워크 (0) | 2022.12.08 |
[참고자료] 생성자와 의존성 주입 (기술매니저님 작성글) (0) | 2022.12.07 |
+ (추가) JWT 사용 흐름 재정리 (0) | 2022.12.07 |