Back End/Spring

[Java 웹개발 마스터] 스터디 4. DI (Dependency Injection) 의존성 주입

쟈누이 2021. 1. 23. 20:14
반응형

의존성 주입에 대해 알려면 우선 Java 에서 말하는 의존성에 대해서 알아야 될 것 같다.


1. 의존성이란?

A타입의 변수를 생성하고, 이에 A를 상속하는 B 객체를 초기화하면 이는 B 객체에 의존성을 가진다는 것이다. 즉, 객체들이 의존 관계가 있다는 것은 객체B 에 있는 클래스가 바뀔 때, 객체 A에 있는 클래스가 변경될 수 있다는 것이다. 상속을 알고 있다면 보다 이해하기가 편할 것 같다. 상속 하는 A의 클래스가 변경될 경우 A를 상속 받는 B의 클래스도 이에 영향을 받는 것에서 알 수 있다. 이 때, "B 클래스는 A클래스에 의존성이 있다." 라고 말한다. 자세한 내용은 아래 링크를 참고하면 될 것 같다.

스프링에서 말하는 의존성은 모듈에 필요한 참조 변수나 객체에 의존하는 것이다.

스프링은 의존성이 필요할 때, DI (의존성 주입) 이라는 기능을 지원하는데, 프로그래머들이 객체를 직접 생성해야되는 번거로움을 줄여 변수 사용과 개발에 더욱 집중할 수 있게 만들어준다.

위의 이미지를 예시로 들자면, lombok의 @(어노테이션) 을 이용하여 스프링의 의존성을 주입하는 모습이다. 이를 통해 개발자들이 변수의 사용과 개발에 더욱 집중할 수 있다. 


2. 의존성 

스프링이 지원하는 의존성 주입(DI Dependency Injection) 에는 두가지가 있다.

1) 매개변수 주입식

매개변수 주입식은 메소드에 들어오는 매개변수 타입 지정만으로 그 객체를 사용할 수 있도록 객체를 스프링이 생성해주는 방식이다. 

@RequestMapping("/home/restaurants")
    @ResponseBody
    public String testRestaurants(Restaurant restaurant) {
        return "레스토랑 이용자 수 : " + restaurant.getCount();
    }

만약  Restraurant 라는 DAO 객체가 있다면, 위 코드에서와 같이 매개변수에서 지정된 타입이 메소드에서 사용될 때(getCount( ) ) 스프링에서 생성해 준 객체를 따로 객체를 만들어줄 필요가 없이 사용할 수 있다.


2) @ (Autowired) 주입식

컨트롤러에 사전에 참조된 @Autowired 방식의 변수를 생성하여 사용하는 것이다.

이는 대신에 해당 클래스들을 @Component, @Repository 등의 어노테이션으로 미리 지정해야 자동연결을 할 수 있다.

@RestController
public class RestaurantController {

    @Autowired
    private RestaurantRepository restaurantRepository;
    @Autowired
    private MenuItemRepository menuItemRepository;

 

두가지의 방식이 있지만, 어느 하나를 집중적으로 사용한다고 보기는 힘들다. 위 두 방법을 잘 믹스해서 사용하는 것이 가장 좋은 개발방법인 듯 하다.


참고 링크

1. 객체 의존성

annajinee.tistory.com/39

 

[Objects] 객체와 의존성

조영호님의 우아한 세미나에 대해 정리한 것으로 자세한 내용은 아래 영상에서 확인 하실 수 있습니다. 영상 링크: https://www.youtube.com/watch?v=dJ5C4qRqAgA&list=PL8D2Xb3AlX8FHqzMLpEMHqXClbh839UYv 객체를..

annajinee.tistory.com

 

 

반응형