[꼼꼼한 개발자] 꼼코더

10. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링 단일 생성자의 묵시적 자동 주입 본문

Spring/코드로 배우는 스프링 웹 프로젝트

10. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링 단일 생성자의 묵시적 자동 주입

꼼코더 2022. 12. 26. 20:43
반응형

🍃 스프링 4.3 이후 단일 생성자의 묵시적 자동 주입

스프링의 주입은 크게 1) 생성자 주입과 2) Setter 주입을 사용한다.

 

  • Setter 주입 : setXXX()와 같은 메서드 작성(혹은 Lombok으로 생성) 후 @Autowired와 같은 어노테이션을 통하여 스프링으로부터 자신이 필요한 객체를 주입해 주도록 한다.
  • 생성자 주입 : 객체 생성시 의존성 주입이 필요하므로 좀 더 엄격하게 의존성 주입을 체크한다는 장접이 있음.

 

기존에 스프링에서는 생성자 주입을 하기 위해 생성자 정의 → @Autowired와 같은 어노테이션과 추가해야만 생성자 주입이 이루어 졌지만 스프링 4.3 이후에는 묵시적으로 생성자 주입이 가능해졌다.


👨🏻‍💻 코드 작성(SampleHotel) / 1번째 방법

예를 들어 Chef라는 존재는 호텔에서도 필요하다고 가정하고 코드로 만들어 본다면 다음과 같이 구성이 가능하다.

코드를 보면 기존과 달리 생성자를 선언하고 Chef를 주입하도록 작성되어 있다.

기존과 다른 점은 @Autowired 어노테이션이 없이 처리되고 있다는 점이다.

 

2️⃣ 번째 방법(더 간략하게)

생성자 자동 주입과 Lombok을 결합하면 SapmpleHotel은 아래와 같이 변경이 가능하다.

@AllArgsConstructor는 인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성하게 된다.

컴파일된 결과를 살펴보면 생성자로 Chef를 받도록 만들어진 것을 확인할 수 있다.

 
 

 

3️⃣ 번째  방법(특정한 변수에 대한 생성자)

만일 여러 개의 인스턴스 변수들 중에서 특정한 변수에 대해서만 생성자를 작성하고 싶다면

아래와 같이 @NonNull과 @RequiredArgsConstructor 어노테이션을 이용할 수 있다.

  • @RequiredArgsConstructor : @NonNull이나 final이 붙은 인스턴스 변수에 대한 생성자만 생성.
 

 


👨🏻‍💻 코드 작성(SampleHotel)

SampleHotel에 대한 테스트 코드(HotelTests)는 아래와 같다.

내용은 기존과 거의 동일하고, 결과는 아래와 같이 의존성 주입이 이루어진 것도 확인할 수 있다.

💁🏻‍♂️ 결과

 
 

 

🧹 최종 정리

  • 스프링의 주입은 크게 1) 생성자 주입과 2) Setter 주입을 사용한다..
  • 스프링 4.3 이후에는 묵시적으로 생성자 주입이 가능해졌다
  • @AllArgsConstructor는 인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성
  • @RequiredArgsConstructor은 : @NonNull이나 final이 붙은 인스턴스 변수에 대한 생성자만 생성하는 어노테이션이다.
 
 
 
 

 

 

 

 

Comments