상세 컨텐츠

본문 제목

[웹개발 101] 롬복 어노테이션 정리 :: @Builder / @NoArgsConstructor / @AllArgsConstructor / @Data

Web/Spring

by 감싹이 2023. 1. 14. 17:36

본문

지금은 <React.js 스프링부트, AWS로 배우는 웹개발 101 2/e> 2장 백엔드 개발을 공부중이다.

롬복을 이번에 처음 사용해봤는데 기본적인 어노테이션을 정리해두면 좋을 것 같아서 글을 남긴다.

 

먼저 어노테이션과 관련한 롬복 공식문서 주소다.

https://projectlombok.org/features/

 

Stable

 

projectlombok.org

교재에서 사용한 어노테이션은 총 네 가지다.

@Builder 

@NoArgsConstructor

@AllArgsConstructor

@Data

 

지금부터 하나씩 간단하게 메모하겠다. 추가 내용이 있다면 나중에 수정될수도..


@Builder

@Builder : 객체 생성을 위한 디자인 패턴 중 하나

공식문서를 살펴보면 '@Builder 어노테이션은 복잡한 Builder APIs를 제공해준다', '@Builder를 사용하면 클래스를 다음과 같은 코드로 인스턴스화하는 데 필요한 코드를 자동으로 생성해준다.'고 되어있다.

Person.builder()
	.name("name")
    	.userId("choi")
    	.title("Implement Model")
    	.build();

이렇게 Builder 패턴을 사용하는 것은 생성자를 사용해 객체를 생성하는 것과 비슷하다. 생성자를 이용하는 것과 비교해 장점이 있다면 생성자 매개변수의 순서를 기억할 필요가 없다는 점이다.

 


@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstrucgor 이 3개의 어노테이션은 특정 필드에 대해 매개 변수를 허용하는 생성자를 생성하고 이 매개 변수를 필드에 할당한다.

@NoArgsConstructor

@NoArgsConstructor : 매개변수가 없는 생성자 구현

공식문서에 따르면 @NoArgsConstructor 어노테이션은 매개변수가 없는 생성자, 즉 기본 생성자를 구현한다. 

@NoArgsConstructor를 사용하는 것은 아래와 같은 생성자를 구현하는 것이다.

Public TodoEntity(){

}

 

@AllArgsConstructor

@AllArgsConstructor : 클래스의 모든 멤버 변수를 매개변수로 받는 생성자 구현

공식문서에는 클래스 내부에 있는 각각의 필드마다 하나의 매개변수를 생성한다고 되어있다. @AllArgsConstructor를 사용하는 것은 아래와 같은 생성자를 구현하는 것이다.

Public TodoEntity(String id, String userId, String title, boolean done) {
	super();
    this.id = id;
    this.userId = userId;
    this.title = title;
    this.done = done;
    }

@Data

@Data : 클래스 멤버 변수의 Getter/Setter 메서드 구현, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor 포함

공식문서에 따르면 @Data 어노테이션은 Getter, Setter 메서드를 구현할 뿐 아니라 @ToString, @EqualsAndHashCode, @RequiredArgsConstructor도 포함하고 있어 @Data 어노테이션이 선언된 클래스에서 해당 어노테이션들을 모두 사용할 수 있다.

롬복이 생성하는 Gatter, Setter만 살펴보겠다.

Public String getId(){
	return id;
    }
Public void SetId(String id){
	return this.id = id;
    }
Public String getUserId(){
	return userId;
    }
Public void SetUserId(String userId){
	return this.userId = userId;
    }
Public String getTitle(){
	return title;
    }
Public void SetTitle(String Title){
	return this.title = title;
    }
Public boolean isDone(){
	return done;
    }
Public void SetDone(boolean done){
	return this.done = done;
    }

 

 

 

 

-- 사담
알고 쓰는 것과 모르고 쓰는 것에는 확실히 차이가 있을 것이다. 롬복의 단점 중 하나가 롬복을 모르는 개발자와 협업할 때 커뮤니케이션이 힘들 수 있다는 것인데, 어떤 어노테이션이 무엇을 구현해주는지 안다면 그러한 단점을 보완할 수 있게 되지 않을까.

 

관련글 더보기