심심한잉여의 잡동사니

[Spring]의존성 주입 @RequiredArgsConstructor 본문

코딩일기/Spring&SpringBoot

[Spring]의존성 주입 @RequiredArgsConstructor

심심한잉여 2022. 9. 6. 09:37
반응형

스프링팀에서 필드주입(field injection) 대신 생성자 주입(Constructor based injection)을 권장헀다.
이유는 편리하다는 것 이외에 장점이 없었기 때문이다. 

@Autowired 를 통해 필드주입을 하는 방법을 배웠으나 회사에 와보니 해당 어노테이션 및 필드주입을 하지 않았다.
따라서 어디에서 의존성 주입을 하는지 궁금해져서 어노테이션들을 다 확인 한 결과 

@RequiredArgsConstructor 라는 어노테이션과 생성자 주입을 알게되었다.

생성자 주입을 하게 될 경우
1. 순환 참조 방지
2. 테스트 코드 작성 용이
3. 코드 악취 제거
4. 객체 변이 방지

라는 장점을 볼 수 있다.

// 생성자 주입
@Controller
public class TestController {

	private final TestService service;
    
    public TestController(TestService service){
    	this.service = service;
    }

}

위 코드가 생성자 주입 코드이다.

하지만 이렇게 항상 쳐준다는 것은 매우 귀찮은 일이다.

이를 해결하기 위해 롬복 라이브러리에서 @RequiredArgsConstructor 라는 어노테이션을 만들어줬다.

// RequiredArgsConstructor 어노테이션을 이용한 생성자주입
@Controller
@RequiredArgsConstructor
public class TestController {
	private final TestService service;
}

위 코드와 같이  @RequiredArgsConstructor 를 사용하게 되면 추가 코드 없이
주입을 원하는 객체 인스턴스에 final 혹은 @notNull 어노테이션을 붙이면 자동적으로 생성자 주입이 만들어진다.

반응형