본문 바로가기
IT/Java

@Autowired 대신 @RequiredArgsConstructor

by 성준하이 2022. 7. 26.
반응형

Spring 에서는 다양한 장점이 존재하는데 그중 하나는 의존성 주입(DI) 에 대한 개념이다.

이 개념이 어떤 의미인지 모른다면 아래 참고포스팅에서 확인하고 오면 도움이 될것이다.

 

여기서 나오는 annotation중 하나는 autowired 라는 annotation이고 

이 annotation의 역할은 스프링 bean에 등록되어있는 객체를 주입해주는 역할이다.

 

하지만 스프링팀에서 autowired를 사용하는것보다 RequiredArgsConstructor를 사용하는것을 추천하는 글을 보았다.

 

일단 먼저 RequiredArgsConstructor annotation은 하는 역할이 자동으로 필수 생성자를 만들어주는 역할을 한다.

비슷한 annotation으로는 NoArgsConstructor, AllArgsConstructor 이 있는데 말 그대로 빈 생성자와 모든 컬럼을 포함하는 생성자를 만들어주고 DTO에서 주로 사용을 하게 된다.

 

다시 RequiredArgsConstructor 로 돌아와서 autowired 대신에 RequiredArgsConstructor를 쓰는 이유를 설명을 하면

기본 문법은 다음과 같다.

  • Autowired 사용시
@Controller
public class Controller {
     @Autowired
     privat Servcic service;
}

 

  • RequiredArgsConstructor 사용시
@Controller
@RequiredArgsConstructor
public class Controller {
     private final Servcic service;
}

 

이렇게 나뉘게 된다.

만약 저 RequiredArgsConstructor 를 안써준다면 아래와 같은 코드이다.

@Controller
public class Controller {
     private final Servcic service;
     public Controller(Service service){
          this.service = service;
     }
}

로 바뀌게 된다. 즉 생성자를 생성하는 코드를 annotation으로 대체를 해준 것이다.

 

결국 autowired를 대신해서 생성자를 사용하라고 권장하는 이유는 다음과 같다.

생성자 주입을 사용할 경우 아래와 같은 장점이 있다고 한다.

  • 순환 참조 방지
  • 테스트 코드 작성 용이
  • 코드 악취 제거
  • 객체 변이 방지 (final 가능)

아직은 직접 코드에서 이 사용에 대한 장점을 체감해보진 못하였지만 알고 있는것이랑 모르고 사용하는것에 대한 차이는 분명히 있을것이다.


참고 포스팅

https://thenicesj.tistory.com/144

 

Spring 에서 IOC, AOP, DI 에 대하여

이번 포스팅에서는 SPRING의 핵심요소인 IOC, AOP, DI에 대해서 다뤄볼 것이다. 다른 특징들도 많지만 이 세가지는 스프링의 장점으로 많이 알려져있다. 하나씩 다뤄보도록 해보자. IOC(Inversion of Contro

thenicesj.tistory.com

 

반응형

댓글