티스토리 뷰
의존성 주입(DI)
스프링 프레임워크에서 지원하는 IoC의 형태 = IoC를 구현하는 디자인 패턴 중 하나
클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 스프링 컨테이너가 자동적으로 연결해주는 것 => 개발자들은 제어를 담당할 필요 없이 빈 설정 파일에 의존관계가 필요하다는 정보만 추가해주면 된다. = 컨테이너가 실행 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해주는 것
- 의존성 주입이 없는 예제
//WelcomeController.java
WelcomeService service = new WelcomeService();
[출처] Spring Boot vs. Spring MVC vs. Spring 의 비교|작성자 멋진태혁
이렇게 보면 WelcomeController가 WelcomeService에 의존한다. = 결합도 증가
만약 WelcomeController의 단위테스트에서 WelcomeService에 대한 mock을 생성한다면 사용하는 게 쉽지 않다.
//WelcomeControllerTest.java
@RestController
public class WelcomeController {
private WelcomeService service = new WelcomeService();
@RequestMapping("/welcome")
public String welcome() {
return service.retrieveWelcomeMessage();
}
}
[출처] Spring Boot vs. Spring MVC vs. Spring 의 비교|작성자 멋진태혁
- 의존성 주입을 이용한 예제
@Component, @Autowired 사용- @Component : 스프링 프레임워크야 이것은 너가 관리해야 하는 빈이야
- @Autowired 스프링 프레임워크야 이 타입에 맞는 것을 알아서 찾아서 그것을 이것과 연결 시켜줘
@Component
public class WelcomeService {
//Bla Bla Bla
}
@RestController
public class WelcomeController {
@Autowired
private WelcomeService service;
@RequestMapping("/welcome")
public String welcome() {
return service.retrieveWelcomeMessage();
}
}
[출처] Spring Boot vs. Spring MVC vs. Spring 의 비교|작성자 멋진태혁
단위테스트 시 스프링 프레임워크에게 WelcomeService의 mock을 WelcomeController 안으로 알아서 주입해 달라고 요청할 수 있다.
- 장점
의존성이 줄어든다.
클래스 재사용성 높임
독립적으로 클래스를 테스트 할 수 있다. = 모의 객체를 주입할 수 있다.
'CS지식' 카테고리의 다른 글
정규화 (0) | 2022.09.03 |
---|---|
Spring IoC (0) | 2022.08.17 |
Spring, Spring Boot (0) | 2022.07.29 |
스프링 프레임워크 (0) | 2022.07.29 |
스택과 큐 (0) | 2022.07.22 |
댓글