티스토리 뷰

Java

[ Lombok ] 생성자 어노테이션

파미페럿 2021. 8. 24. 19:13

lombok은 사용하다보면 진짜 편리한 라이브러리구나를 느낀다.

개발자가 일일이 개발해야하는 것을 어노테이션 하나로 구현이 바로 가능하다. 덕분에 코드는 더 짧아지고 개발자가 코딩해야되는 양이 더 줄어든다. (물론 너무 남발하는 것도 안 좋긴 하고 때에 따라 사용한 어노테이션이 코드의 퀄리티를 떨어뜨려 놓을 수도 있다.)

 

이번에는 자주 사용하지만 눈여겨 보지 않았던 Lombok의 객체 생성자 관련 어노테이션을 정리해보고자 한다.

lombok에서 제공하는 생성자 어노테이션은 아래와 같이 3가지가 있다. RequiredArgsConstructor, NoArgsConstructor, AllArgsConstructor

 

@NoArgsConstructor

제일 기본인 생성자 어노테이션이다. 아무 인수가 없는 생성자를 셍성해준다.

DTO를 DB와 연결해서 사용할 때나 API를 호출하는 곳에서 파라미터를 DTO로 받아올 때 기본적으로 이와 같이 아무 인수가 없는 생성자라도 있어야해서 DTO에 제일 많이 사용했다.

 

아래는 예시로 API를 호출하는 곳에서 파라미터를 받아올 때 사용하는 ManuRequest이다. @NoArgsConstructor를 선언하면 인수를 받지 않는 기본 생성자가 구현되어 각 변수들에 각 자료형에 대한 초기값이 설정되고 호출하는 곳에서 넘긴 값을 ManuRequest에 매핑해서 사용할 수 있게 된다. 

@NoArgsConstructor
public class MenuRequest {
	@NotNull
	private int id;
	
	private String menuName;
	
	private String partName;
}

 

단, @NoArgsConstructor에 아래와 같이 force 옵션을 true로 주면 객체 내의 모든 변수가 초기값으로 설정되지 않아 컴파일 에러가 발생한다. (force의 기본 값은 false이다. 그래서 그냥 @NoArgsConstructor를 사용하면 변수가 초기값으로 설정되는 것이다.)

@NoArgsConstructor(force=true)

 

 

@RequiredArgsConstructor

@NoArgsConstructor 다음으로 많이 사용하는 생성자 어노테이션이다. 'Required' 즉, 꼭 필요한 객체의 변수를 인수로 받는 생성자를 구현해준다. 여기서 꼭 필요한 객체의 변수는 final 또는 @NotNull 어노테이션이 붙은 변수를 의미한다.

단 여기서 @NotNull은 lombok의 어노테이션이다. 다른 라이브러리의 @NotNull은 @RequiredArgsConstructor를 사용해도 해당 필드가 인수로 있는 생성자는 구현되지 않는다. 

@RequiredArgsConstructor
public class OrderRequest {
	@NotNull
	private Menu menu;
	
	@NotNull
	private int count;
	
	private PayMethod payMethod;
}

 

 

@AllArgsConstructor

해당 객체 내에 있는 모든 변수들을 인수로 받는 생성자를 만들어내는 어노테이션이다. 하지만 이 어노테이션을 사용하기보다는 build 패턴을 사용하던가 정적 팩토리 메소드를 사용하는 것이 코드 가동성에 더 좋다.

@AllArgsConstructor
@Getter
public class MenuRequest {
	@NotNull
	private int id;
	
	private String menuName;
	
	private String partName;
}

 

 

위 어노테이션을 사용하면 아래와 같이 모든 필드가 있는 생성자가 생성되는 것이고, NotNull을 지정한 id에 대해 null 값인지에 대해 체크도 한다.

MenuRequest menu = new MenuRequest(id, menuName, partName);

 

 

lombok에서는 위와 같이 유용한 생성자 어노테이션을 제공해준다. 하지만 각 어노테이션은 확실히 특징이 있는 것들로 개발자 본인이 해당 객체에 어떤 어노테이션을 사용하면 좋을지 판단을 잘 해서 사용해야 한다.

또한 정적 팩토리 메소드나 build 패턴이 아닐 경우 생성자를 코드로 직접 작성하는 것보다는 확실히 위와 같은 어노테이션으로 정의해주는 것이 놓은 것 간편한 것 같다.

 

 

 

 

✋ lombok constructor(생성자) 공식 문서

https://projectlombok.org/features/constructor

 

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

 

projectlombok.org

 

 

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함