의존성 주입
- 의존성 주입 = Dependency Injection = DI
프로그램 디자인이 결합도를 느슨하게 되도록하고 의존관계 역전 원칙과 단일 책임 원칙을 따르도록 클라이언트의 생성에 대한 의존성을 클라이언트의 행위로 분리하는 것 by 위키피디아- 의존 관계란?
- A가 B를 의존한다 = 의존대상 B가 변하면 그것이 A에 영향을 미친다
- 다양하게 의존 관계를 맺으려면 인터페이스로 추상화 해야 함 ⇒ 실제 구현 클래스와의 관계는 느슨해지고 결합도가 낮아짐
- 의존 관계 주입이란?
- 의존관계를 외부에서 결정하고 주입하는 것
- 클래스 변수를 결정하는 방법 = DI를 구현하는 방법
- 런타인 시점의 의존관계를 외부에서 주입하여 DI 구현 완성
- DI 장점
- 의존성/종속성 ↓ : 변화가 있더라도 수정할 일이 적다
- 재사용성 ↑ : 다른 클래스에서도 사용 가능
- 테스트 용이
- 유연한 코드 by 낮은 결합도
- 참고 : 의존관계 주입(Dependency Injection) 쉽게 이해하기 (techcourse.co.kr)
DI 방법
- Field(필드) 주입
- Setter(수정자) 주입
- Constructor(생성자) 주입
Field 주입
- 멤버 객체에 @Autowired 추가
- Spring 런타임시 ⇒ 타입이 같은 객체를 검색해 사용 or 없으면 생성 후 등록
- 코드가 간결하나 외부에서 변경이 어려움
- 프레임 워크에 의존적
- 객체지향적으로 좋지 않음
Setter 주입
- setter 메소드에 @Autowired 선언 ⇒ setter 메소드의 파라미터에 해당하는 객체를 빈에서 불러옴
- 변경 용이
Constructor 주입
- 빈이 만들어지는 시점에 모든 의존 관계를 빈에서 가져와야 함
- 스프링 프레임워크에서 권장
- 순환 참조 방지
- 변경의 가능성 배제, 불변성 보장
- 테스트 용이
'Spring > + α' 카테고리의 다른 글
API 기초 - API 의미, API 종류(WebSokcet, REST, Web), API 유형 (0) | 2023.11.22 |
---|---|
DTO, DAO에 대해서 (0) | 2023.11.15 |
JPQL과 QueryDSL에 대해 끄적 (0) | 2023.11.07 |
SpringBoot에 대해 끄적 (0) | 2023.09.27 |
JPA에 대해 끄적 (0) | 2023.09.27 |