녕의 학습 기록

[Spring 기본] 의존관계 자동 주입 (2) 본문

Dev/Spring

[Spring 기본] 의존관계 자동 주입 (2)

kjyyjk 2022. 11. 18. 02:22

 학습 내용 

의존관계 주입 옵션처리 / 생성자 주입 /  롬복 라이브러리 설정 및 이용


* 옵션처리

 

@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과 마찬가지로 스프링 전반에서 사용 가능하다

 

- 실행 결과 확인

(required = false)는 호출이 안된 것을 확인 가능

 

* 생성자 주입 권장 이유

 

대부분의 의존관계는 애플리케이션 도중에 변경 x ==> 불변!!

 

만약 수정자 주입으로 public setter 열어두면 누군가가 실수로 변경하거나 오류 발생 가능

 

생성자 주입은 객체 생성 시에 딱 한번만 호출하기 때문에 불변.

 

+ 생성자 주입을 이용하면 생성자 호출 시에 데이터 누락했을 때 컴파일 오류 바로 확인 가능

 

+ ' 컴파일 오류는 세상에서 가장 빠르고 좋은 오류이다 '

 

생성자 주입은 처음 호출 후에 값 변경이 불가하므로 필드에 final 키워드 사용이 가능하다.

 

final 사용 시 코드 누락된 부분이 있으면 컴파일 오류로 바로바로 확인 가능하기 때문에 좋다..!

 

하지만 setter 나 다른 주입방식은 final 사용 불가함

 

그렇기 때문에 항상 생성자 주입을 선택!! 가끔 예외시에는 수정자 주입을 선택

 

* 롬복 설정 및 활용

 

롬복이란??

 

Lombok이란 Java의 라이브러리로 반복되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 라이브러리다

 

Lombok이란?

Lombok이란? Lombok이란 Java의 라이브러리로 반복되는 메소드를 Annotation을 사용해서 자동으로 작성해주는 라이브러리다. 보통 DTO나 Model, Entity의 경우 여러 속성이 존재하고 이들이 가지는 프로퍼티

www.korecmblog.com

 

처음 스프링 프로젝트 생성할 때 롬복 라이브러리 자동으로 추가

나는 직접 롬복 라이브러리를 추가하고 설정해야한다

 

build.gradle에서 lombok라이브러리 관련 설정 및 추가

 

+ 플러그인에서 롬복 설치

 

+

빨간 부분 체크

 

까지 하면 설정은 끝!!

 

롬복은 어떤 기능을 제공할까 ?

-> 자바의 애노테이션 프로세서 기능을 이용하여 컴파일 시점에 코드를 자동 생성

 

- 자동으로 getter setter 제공

 

@Getter @Setter 애노테이션으로 getter setter 코드없이 이용

- 생성자 제공

@RequiredArgsConstructor 애노테이션으로 생성자 코드 없이 이용

초기화 되지 않은 모든 final 필드에 관해서 생성자를 생성!!

 

인텔리제이에서 Ctrl + F12 를 눌러 해당 클래스의 메서드를 확인해 보면

 

생성자가 들어와있는 것을 확인 가능

 

 

# Lombok 라이브러리를 이용하니 기능은 기존과 동일하면서도 코드가 정말 간결해졌다..!

 


 다음 학습 내용 

 

Autowired 시 빈이 2개 있을 경우에 대하여 학습

 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com