본문 바로가기

Java/Spring

Lombok 라이브러리

롬복(Lombok)

롬복(Lombok)은 Java에서 반복적으로 작성되는 getters/setters나 equals, hashCode, toString 또는 생성자 관련 코드들을 간결하게 만들어주는 라이브러리다. 사실 자바를 지원하는 웬만한 IDE가 이런 코드들의 자동 생성을 지원하고 있어서 필요성을 못 느낄수도 있으나, 롬복(Lombok)은 유지 보수시에 큰 도움이 된다. 유지보수시에 클래스의 필드의 갯수와 비례해서 길어지는 getters/setters가 없으니 코드가독성이 올라가고, 필드값을 추가삭제 할 때도 getters/setters에 대한 신경을 쓰지 않아도 된다. 

 

@Getter @Setter

롬복의 @Getter와 @Setter 애노테이션을 클래스명 위에 명시하면, 필드값에 대한 getters/setters 메소드가 자동 생성된다. 아래 예제들을 보면 롬복이 사용되지 않은 클래스와 롬복이 적용된 클래스의 차이를 알 수 있다.

 

  • getters/setters를 직접 명시한 클래스 (롬복 x)

public class Book { private String name; private int price; private String releaseDate; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public String getReleaseDate() { return releaseDate; } public void setReleaseDate(String releaseDate) { this.releaseDate = releaseDate; } }

  • 롬복의 @Getter @Setter를 사용한 경우

@Getter @Setter public class Book { private String name; private int price; private String releaseDate; }

import 되는 패키지명이 lombok임을 확인하여 같은 이름의 다른 애노테이션을 사용하지 않도록 주의한다.

@NoArgsConstructor @AllArgsConstructor

@NoArgsConstructor는 기본생성자, @AllArgsConstructor는 필드값을 모두 포함한 생성자를 자동 생성해준다.

 

  • 기본생성자와, 모든 필드값을 받는 생성자를 직접 명시한 클래스 (롬복 x)

public class Book { private String name; private int price; private String releaseDate; public Book() { } public Book(String name, int price, String releaseDate) { this.name = name; this.price = price; this.releaseDate = releaseDate; } }

  • 롬복의 @NoArgsConstructor @AllArgsConstructor를 사용한 경우

@NoArgsConstructor @AllArgsConstructor public class Book { private String name; private int price; private String releaseDate; }

여러가지 기능들

필드값이 3개뿐인 클래스에도 롬복을 이용하여 가독성이 훨씬 좋아졌다. 예제를 보면 사용방법이 어렵지 않음을 알 수 있으니, 다른 애노테이션은 기능만 소개하겠다.

 

  • @ToString : toString 메소드 자동생성, 클래스명(필드명1=값1, 필드명2=값2, . . . ) 형태로 출력된다. 출력을 원치 않는 필드가 있을 경우, exclude 키워드를 이용한다. ex) @ToString(exclude = "필드명") 
  • @EqualsAndHashCode : equals와 hashCode 메소드 자동생성, equals 메소드가 부모클래스의 필드 값도 비교 하길 원하는 경우 callSuper키워드를 이용한다. 기본값은 false로 되어있다. ex) @EqualsAndHashCode(callSuper = true)
  • @RequiredArgsConstructor : 생성자를 자동 생성하지만, 필드명 위에 @NonNull로 표기된 경우만 생성자의 매개변수로 받는다. 
  • @Data : 위에서 소개한 여러 애노테이션의 조합이다. @Data하나를 명시하는건 @Getter @Setter @ToString @EqualsAndHashCode @RequiredArgsConstructor를 한번에 명시한 것과 같은 효과가 난다.