♪ 학습 내용
의존관계 주입 옵션처리 / 생성자 주입 / 롬복 라이브러리 설정 및 이용
* 옵션처리
@Autowired 이용 시에 해당하는 자동 주입 대상이 없으면 오류가 발생한다
하지만 개발하다보면 빈 없이도 동작해야할 때가 가끔 있기 때문에 따로 처리가 필요
세가지 방법!!
- Autowired의 required 값을 false로 설정한다
(디폴트는 true)
@Autowired(required = false)
public void setNoBean(Member member){
System.out.println(member);
}
위의 Member클래스는 스프링에서 관리하는 클래스가 아니기 때문에 빈으로 등록되어있지 않고
자동의존관계 주입도 불가하다.
하지만 Autowired의 required 옵션의 값을 true(디폴트)가 아닌 false로 주었기 때문에 오류가 발생하지 않는다
이 경우에는 의존관계가 없기에 메서드 자체가 호출이 안됨!! (뒤에서 결과확인)
- @Nullable 이용
@Autowired
public void setNoBean(@Nullable Member member){
System.out.println(member);
}
require 설정과는 달리 메서드 호출은 되지만, null 값으로 들어온다.
@Nullable은 스프링에서 전반적으로 이용 가능해서 생성자 주입 시에 특정 필드에만도 사용가능하다
(어느 특정 빈 하나 없이 작동 해야하는 경우)
- Optional<>이용
Optional은 자바 8부터 지원하는 문법으로 값이 있을 수도, null일 수도 있다는 상태를 감싸?는 것이다
@Autowired
public void setBean3(Optional<Member> member){
System.out.println(member);
}
Optional로 감싸져 있기 때문에 자동 주입 대상이 없으면 Optional.empty가 찍힌다
Optional도 @Nullable과 마찬가지로 스프링 전반에서 사용 가능하다
- 실행 결과 확인
* 생성자 주입 권장 이유
대부분의 의존관계는 애플리케이션 도중에 변경 x ==> 불변!!
만약 수정자 주입으로 public setter 열어두면 누군가가 실수로 변경하거나 오류 발생 가능
생성자 주입은 객체 생성 시에 딱 한번만 호출하기 때문에 불변.
+ 생성자 주입을 이용하면 생성자 호출 시에 데이터 누락했을 때 컴파일 오류 바로 확인 가능
+ ' 컴파일 오류는 세상에서 가장 빠르고 좋은 오류이다 '
생성자 주입은 처음 호출 후에 값 변경이 불가하므로 필드에 final 키워드 사용이 가능하다.
final 사용 시 코드 누락된 부분이 있으면 컴파일 오류로 바로바로 확인 가능하기 때문에 좋다..!
하지만 setter 나 다른 주입방식은 final 사용 불가함
그렇기 때문에 항상 생성자 주입을 선택!! 가끔 예외시에는 수정자 주입을 선택
* 롬복 설정 및 활용
롬복이란??
Lombok이란 Java의 라이브러리로 반복되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 라이브러리다
나는 직접 롬복 라이브러리를 추가하고 설정해야한다
+ 플러그인에서 롬복 설치
+
까지 하면 설정은 끝!!
롬복은 어떤 기능을 제공할까 ?
-> 자바의 애노테이션 프로세서 기능을 이용하여 컴파일 시점에 코드를 자동 생성
- 자동으로 getter setter 제공
- 생성자 제공
초기화 되지 않은 모든 final 필드에 관해서 생성자를 생성!!
인텔리제이에서 Ctrl + F12 를 눌러 해당 클래스의 메서드를 확인해 보면
생성자가 들어와있는 것을 확인 가능
# Lombok 라이브러리를 이용하니 기능은 기존과 동일하면서도 코드가 정말 간결해졌다..!
♪ 다음 학습 내용
Autowired 시 빈이 2개 있을 경우에 대하여 학습
'Dev > Spring' 카테고리의 다른 글
[Spring 기본] 의존관계 자동 주입 (4) (0) | 2022.11.20 |
---|---|
[Spring 기본] 의존관계 자동 주입 (3) (0) | 2022.11.19 |
[Spring 기본] 의존관계 자동 주입 (1) (0) | 2022.11.13 |
[Spring 기본] 컴포넌트 스캔 (2) (0) | 2022.11.12 |
[Spring 기본] 컴포넌트 스캔 (1) (0) | 2022.11.10 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!