티스토리 뷰

CS지식

DI(Dependency Injection)

몰라모르겠어요 2022. 7. 29. 01:22

의존성 주입(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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함