본문 바로가기

컴퓨터/Spring Boot

[lombok] 룸북이란?

이번에 새 프로젝트를 시작하면서 롬북을 쓰게 되었다.

새로운 기술 조합으로 프로젝트를 시작하려니 배울 게 너무나도 많다.

그런데 왜 진작 안썼을까? 하는 기술들이 대부분이다.

 

JPA를 사용하다보니 롬북의 편리함을 더욱 느껴서 정리해보려고 한다.

 

Lombok이란?

어노테이션을 통해 특정 메서드를 자동으로 생성해주는 라이브러리이다.
모델 객체마다 반복적으로 생성해주어야하는 getter나 setter 메소드를 매우 간편하게 생성할 수 있다.

코드를 자동으로 생성해주기 때문에 생산성을 향상시킬 수 있으며

코드 가독성을 높이고 유지 보수에 용이하다는 장점이 있다.

 

Lombok 설정하기

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

build.gradle 파일에 의존성을 추가한 후 새로고침을 한다.

 

 

Lombok 어노테이션 

[User 객체]

public class User{
    private Long id;
    private String name;
    private int age;
}
  • @Getter / @Setter : 클래스 이름위에 생성하면 모든 변수들에, 변수 이름 위에 적용하면 해당 변수들만 적용
  • @AllArgsConstructor : 모든 변수에 대한 생성자를 자동완성
@AllArgsConstructor
public class User{
    private final Long id;
    private String name;
    private int age;
}

User user = new User(1L, "홍길동", 20)

 

  • @NoArgsConstructor : 파라미터가 없는 기본 생성자를 자동완성
@NoArgsConstructor 
public class User{
    private Long id;
    private String name;
    private int age;
}

User user = new User();

만약 항상 초기화를 해주어야하는 final 필드가 존재할 경우는 컴파일 에러가 발생한다.

이때, (force=true)로 옵션값을 따로 설정한다면 모든 final 필드는 0, false, null로 초기화된다.

만약 @NonNull 어노테이션이 붙어있다면 생성자에 들어가지 않기 때문에 따로 확인해야한다.

 

  • @RequiredArgsConstructor : 특정 변수만을 활용하는 생성자를 자동완성 (@NonNull, final 변수)
@RequiredArgsConstructor
public class User{
    private Long id;
    private String name;
    private final int age;
}

User user = new User(20)

 

  • @EqualsAndHashCode : 클래스에 대한 equals 함수와 hashcode 함수를 자동으로 생성
  • @ToString : 클래스 변수들을 기반으로 ToString 메소드를 자동완성 (@ToString.Exclude-출력제외)
  • @Data : @ToString, @EqualsAndHashCode, @Getter/@Setter, @RequiredArgsConstructor 자동완성
  • @Builder : 객체 생성에 Builder 패턴 적용. 객체 끝에 .build(); 를 붙여 사용
    • NoArgs, RequiredArgs를 사용하거나 클래스 내부에 생성자가 없을 때 @Builder를 쓴다면 모든 필드를 매개값으로 하는 생성자를 자동으로 선언하여 사용하기 때문에 컴파일 에러가 발생한다. (AllArgs가 없다면!)
    • 따라서 @Builder를 쓰려면 @AllArgsConstructor를 사용해야한다.
    • jpa를 쓸 경우 반드시 기본 생성자가 필요한데 이런 경우에는 @NoArgsConstructor을 써야만 한다.
    • 따라서 1. 전체 필드를 사용하는 생성자를 선언하고 그 생성자에 @Builder를 쓰던가 2. @NoArgsConstructor와 @AllArgsConstructor을 같이 사용하면 @Builder를 사용할 수 있다.
    •  @Builder.Default : 빌더 패턴을 통해 인스턴스를 만들 때 특정 필드를 특정 값으로 초기화하고 싶을 때 사용. 만약 빌더 패턴을 사용하는데 필드에 객체 타입이 있다면 초기화를 위해 사용하자!

*** 상위 클래스에 적용(callSuper=true)

728x90