코딩 하는 가든

Java - Lombok 자주 쓰는 어노테이션 정리 본문

Java

Java - Lombok 자주 쓰는 어노테이션 정리

가든리 2020. 3. 8. 00:47

Lombok 자주 쓰는 어노테이션 정리

Lombok이란?

Java에서 자주 반복되는 코드(Getter, Setter, 생성자 등...)들을 어노테이션을 통해 자동으로 생성 해 주는 라이브러리 이다.

 

Lombok 적용 전

public class Post {
    private String title;
    private String content;
    private String author;
    
    public void setTitle(String title) {
    	this.title = title;
    }
    
    public void setContent(String content) {
    	this.content = content;
    }
    
    public void setAuthor(String author) {
    	this.author = author;
    }
    
    public String getTitle() {
    	return title;
    }
    
    public String getContent() {
    	return content;
    }
    
    public String getAuthor() {
    	return author;
    }
}

 

 

Lombok 적용 후

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class Post {
    private String title;
    private String content;
    private String author;
}

위와 같이 @Getter @Setter 어노테이션을 붙이주면 명클래스 멤버 변수들의 getter, setter 메소드를 이용 할 수 있다.

 

그럼 다음으로 Lombok에서 자주 쓰이는 몇 가지 어노테이션에 대해 알아보자.

(@Getter, @Setter는 위의 예시로 보였으므로 생략)

 

 

@NoArgsConstructor

public Post() {}

@NoArgsConstructor 어노테이션을 붙이면 위와같은 클래스의 기본 생성자를 만들어 준다.


@AllArgsConstucto

@AllArgsConstructor 어노테이션은 클래스의 모든 멤버변수를 받는 생성자를 만들어 준다.


@RequiredArgsConstructor

클래스의 멤버변수중 final 키워드, 혹은 lombok 어노테이션인 @NonNull 이 붙은 멤버 변수만을 받는 생성자를 만들어 준다.


@Builder

빌더패턴을 적용 시킨 방법으로 객체를 생성 할 수 있다. 빌더 패턴을 적용시킨 객체 생성 방법은 다음과 같다.

post = Post.builder()
        .title(title)
        .content(content)
        .author(author)
        .build();

@ToString

클래스의 멤버 변수들에 toString을 적용시켜 변수들을 출력 할 수 있게 해 준다.

// 위의 빌더 패턴으로 생성한 Post 객체가 있다고 가정.
// @ToString annotation이 있으면

System.out.println(post); // 결과 - > Post(title = title, content = content, author = author)

* ToString 사용시 멤버 변수 중 객체 타입이 있고, 순환 참조가 있다면 무한 루프가 발생한다!

(A class의 멤버 변수로 B class를 갖고 있고, B class의 멤버 변수로 A class를 갖고 있다면 ToString의 무한 반복이 발생 한다.)

그럴 때는 exclude 키워드를 이용해서 명시적으로 해당 필드를 제외 해 줘야 한다. 

- > @ToString(exclude="classA")


@Data

위에 언급 했던 모든 어노테이션을 포함하는 어노테이션이다. 추가로 @EqualsAndHashCode 라는 어노테이션도 지원 한다.

 

기타 어노테이션은 추후에 정리.