Programing/Springboot
Spring lombok @RequiredArgsConstructor
리커니
2022. 6. 28. 18:04
반응형
Spring lombok @RequiredArgsConstructor
@RequiredArgsConstructor 은 lombok 에서 제공하는 annotation입니다.
이 annotation을 추가하게 되면 클래스의 final 이나 @NonNull인 필드값을 파라미터로 받는 생성자를
자동으로 만들어 줍니다.
예를들어 아래와 같이 User 라는 클래스가 있을 때 클래스 변수를 초기화하지 않고 final로 설정하면
반드시 생성자가 필요하게됩니다.
(Spring 에서는 getter/setter 보다는 생성자 주입 방식을 권장합니다.)
public class User {
private final String userId;
private final String userName;
@NonNull
private String email;
/*반드시 생성자가 필요*/
public User(String userId, String userName) {
this.userId = userId;
this.userName = userName;
}
}
이유는 final 키워드는 변하지 않는 변수를 선언할 때 사용하는데
초기화 하는 방법은 선언 시 값을 할당하거나 생성자를 통해 초기화 해주는 방법 뿐이기 때문입니다.
이럴 때 생성자를 만들지 않고 @RequiredArgsConstructor를 선언하게 되면 final, @NonNull인 변수를 파라미터로 갖는
생성자가 자동으로 생성됩니다.
@RequiredArgsConstructor
public class User {
private final String userId;
private final String userName;
@NonNull
private String email;
/* @RequiredArgsConstructor 선언만으로 자동생성
public User(String userId, String userName, @NonNull String email) {
this.userId = userId;
this.userName = userName;
this.email = email;
}
*/
}
위의 코드를 작성 시 오류가 발생하지 않는 것을 확인하실 수 있습니다.
이를 활용하여 우리가 흔히 Spring MVC에서 @Mapper나 @Service 로 설정한 Spring Bean을
주입할 때 사용하는 @Autowired나 @Resource 대신에 사용할 수 있습니다.
@Service("loginBusiness")
public class LoginBusiness implements InsertService{
@Resource(name = "loginMapper")
private LoginMapper mapper;
@Override
public int insData(HashMap<String, Object> parameter) throws SQLException {
return mapper.insData(parameter);
}
}
@Service("loginBusiness")
@RequiredArgsConstructor
public class LoginBusiness implements InsertService{
private final LoginMapper mapper;
@Override
public int insData(HashMap<String, Object> parameter) throws SQLException {
return mapper.insData(parameter);
}
}
여러개의 @Autowired나 @Resource를 쓴다면 코드가 더 간결해지겠죠.
반응형