twocowsong

@Autowired , @RequiredArgsConstructor 차이 본문

IT/SpringBoot

@Autowired , @RequiredArgsConstructor 차이

WsCode 2022. 3. 23. 08:28

Spring을 사용하다보면 스프링 컨테이너가 의존 관계 주입을 대신 해주기때문에 개발자는 스프링에서 할당된 객체를 손쉽게 사용하며 싱글톤도 보장이 되어 자원에 효율적입니다. 

 

제어 역전은 개발자가 직접 객체를 생성하지않고 스프링에게 권한을 맡기면서 사람이 아닌 스프링에게 권한이 넘어가며 그부분을 제어의 역전이라고합니다.

 

객체를 사용할때 저희에게 친숙한 어노테이션들이 있습니다.

@Autowired 와 Lombok에 @RequiredArgsConstructor 입니다.

 

의존성 주입

@Autowired : 필드주입

 - 상황의 타입에 맞게 IoC컨테이너 안에 존재하는 Bean을 자동으로 주입해주게 됩니다.

 - 빈을 생성한 후에 주입하려는 빈을 찾아 주입합니다.

 - 필드를 final로 선언할 수 없습니다.

 

@RequiredArgsConstructor : 생성자 주입

 - 유일하게 필드를 final로 선언할 수 있습니다.

 - 생성자의 인자에 사용되는 빈을 찾거나 빈 팩토리에서 만든 후에 빈을 생성합니다.

 

생성자 주입방식을 권장하는 이유

1. final 선언 가능

  - 객체에 불변성을 보장함으로 Thread-safe를 보장합니다.

 

2. 순환 참조 방지

  - A -> B 참조 B -> A 참조를 할경우 빈을 주입하는 순서가 다르기 때문에 순환참조가 발생됩니다.

  생성자 주입 : 주입하려는 빈을 먼저 찾아 주입

  필드 주입 : 빈을 생성한 후에 참조하려는 빈을 찾아 주입

  Bean이 생성된 이후에 변경되는 위험성이 다른 방식에 비해 줄어듭니다.

 

3. 테스트 코드 작성 용이

 

 

참고 사이트)

https://velog.io/@sloools/Spring-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85-%EC%A2%85%EB%A5%98-%EB%B0%8FRequiredArgsConstructor-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98

'IT > SpringBoot' 카테고리의 다른 글

Filter, interceptor, Aop  (0) 2022.05.24
Spring Boot AOP  (0) 2022.03.22
Environment  (0) 2022.02.02
@RestController @Controller  (0) 2022.01.24
@Scheduled  (0) 2022.01.23