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를 쓴다면 코드가 더 간결해지겠죠.

 

반응형