[꼼꼼한 개발자] 꼼코더
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이 붙은 인스턴스 변수에 대한 생성자만 생성하는 어노테이션이다.
위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.
'Spring > 코드로 배우는 스프링 웹 프로젝트' 카테고리의 다른 글
12. 코드로 배우는 스프링 웹 프로젝트 - [스프링과 DataBase 연동] - 커넥션 풀 설정 (0) | 2022.12.31 |
---|---|
11. 코드로 배우는 스프링 웹 프로젝트 - [스프링과 DataBase 연동] - 프로젝트의 JDBC 연결 (0) | 2022.12.29 |
09. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - Lombok 관련, 테스트 관련, 스프링 어노테이션들 (0) | 2022.12.26 |
08. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링이 동작하면서 생기는 일 (0) | 2022.12.26 |
07. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링이 동작하면서 생기는 일 (0) | 2022.12.26 |
Comments