봄디의 개발일지
[스프링] @RequiredArgsConstructor 어노테이션 본문
1️⃣ 의존성 주입의 종류
의존성 주입의 종류로는 Field (필드주입) , Setter (세터주입) , Constructor (생성자 주입) 이 있습니다.
✅ Field
public class TestService {
@Autowired
private UserRepository userRepository;
@Autowired
private MemberRepository memberRepository;
}
✅ Setter
public class TestService {
private UserRepository userRepository;
private MemberRepository memberRepository;
@Autowired
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
✅ Constructor
public class TestService {
private final UserRepository userRepository;
private final MemberRepository memberRepository;
@Autowired
public TestService (UserRepository userRepository, MemberRepository memberRepository) {
this.userRepository = userRepository;
this.memberRepository = memberRepository;
}
}
Field, Setter 를 통한 의존성 주입은 필드를 final 로 선언할 수 없기 때문에 불변성 보장이 어렵고, 의존성이 누락 될 위험도 존재합니다.
Constructor 를 통한 의존성 주입은 생성자 코드를 넣어줘야한다는 단점이 있습니다.
따라서 @RequiredArgsConstructor 어노테이션을 통해 안정적이고 가독성 있는 코드를 작성하는 게 좋습니다.
2️⃣ @RequiredArgsConstructor 어노테이션이란 ?
@RequiredArgsConstructor 어노테이션이란 Lombok 라이브러리에서 제공하는 기능으로,
java 클래스에서 final 로 선언된 필드나 @NotNull 로 선언된 필드에 대해 생성자를 자동으로 생성해주는 어노테이션입니다.
@RequiredArgsConstructor 어노테이션을 사용하면 새로운 필드를 추가할 때 생성자를 다시 만들어야하는 불편함을 없애줍니다.
또한 Mock 객체 주입이 용이해져 테스트 코드의 작성이 쉬워집니다.
✅ @RequredArgsConstructor 사용코드
@RequiredArgsConstructor
public class TestService {
private final UserRepository userRepository;
private final MemberRepository memberRepository;
}