2021-03-04 TIL(at work)

업데이트:
2 분 소요

Java Library

  • 자바 언어로 프로그래밍을 할 때, 이를 도와주는 외부 라이브러리들이 있다. 몇몇의 유명한 라이브러리들 중, 실제 업무에서 사용하고 있는 Lombok 이라는 라이브러리에 대해 자세히 알아보았다.

Lombok?

  • 롬복은 다양한 애노테이션을 제공하는 라이브러리인데, 롬복을 잘 활용하면 코드를 획기적으로 줄일 수 있다. 대표적으로 @getter, @setter와 같은 애노테이션이 있다.

1. Lombok 설치하기

  • 빌드 도구로 maven을 사용하는 경우 pom.xml 파일에 아래 디펜던시를 추가한다. 1.18.18 버전은 2021년 1월에 출시된 버전이고, 자신의 프로젝트에 맞는 버전을 찾아 디펜던시를 추가하면 된다.
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.18</version>
</dependency>
  • 빌드 도구로 gradle을 사용하는 경우 build.gradle 파일에 아래의 의존성을 주입한다.
implementation 'org.projectlombok:lombok:1.18.18'
  • 프로젝트를 어떻게 구성했는지에 따라 외부 라이브러리를 사용하는 방식이 달라지기 때문에, 자신의 프로젝트에 따라 설치 방법은 달라진다. (참고 URL : https://search.maven.org/artifact/org.projectlombok/lombok/1.18.18/jar)

2. Lombok 활용하기

(1) Vanilla Java

  • Lombok을 사용하지 않고 Article이라는 클래스를 작성했다. 참고로, Vanilla Java를 이용했다는 말은 순수한 자바 언어만을 이용하여 코드로 작성했다는 의미이다.
public class Article {
  private String articleId;
  private String title;
  private String author;
  private String content;
  private long likes;

  public String getArticleId() {
    return articleId;
  }

  public void setArticleId(String articleId) {
    this.articleId = articleId;
  }

  public String getTitle() {
    return title;
  }

  public void setTitle(String title) {
    this.title = title;
  }

  public String getContent() {
    return content;
  }

  public void setContent(String content) {
    this.content = content;
  }

  public String getAuthor() {
    return author;
  }

  public void setAuthor(String author) {
    this.author = author;
  }

  public long getLikes() {
    return likes;
  }

  public void setLikes(long likes) {
    this.likes = likes;
  }

  @Override
  public String toString() {
    return "Article{" +
        "articleId='" + articleId + '\'' +
        ", title='" + title + '\'' +
        ", content='" + content + '\'' +
        ", author='" + author + '\'' +
        ", likes=" + likes +
        '}';
  }
}

(2) @Getter & @Setter

  • 여기서 @Getter@Setter를 사용하여 코드를 줄일 수 있다. 두 애노테이션을 사용하면, 일일이 모든 변수에 대한 gettersetter를 만들어줄 필요가 없다.
@Getter
@Setter
public class Article {
  private String articleId;
  private String title;
  private String author;
  private String content;
  private long likes;

  @Override
  public String toString() {
    return "Article{" +
        "articleId='" + articleId + '\'' +
        ", title='" + title + '\'' +
        ", content='" + content + '\'' +
        ", author='" + author + '\'' +
        ", likes=" + likes +
        '}';
  }
}
  • 클래스 자체에 @Getter, @Setter 애노테이션을 달 수도 있고 각각의 변수에 애노테이션을 붙일 수도 있다.
public class Article {
  @Getter @Setter private String articleId;
  @Getter @Setter private String title;
  @Getter @Setter private String author;
  @Getter @Setter private String content;
  @Getter @Setter private long likes;

  @Override
  public String toString() {
    return "Article{" +
        "articleId='" + articleId + '\'' +
        ", title='" + title + '\'' +
        ", content='" + content + '\'' +
        ", author='" + author + '\'' +
        ", likes=" + likes +
        '}';
  }
}

(3) @ToString

  • @ToString을 사용하여 toString() 메서드를 대체할 수 있다.
@Getter
@Setter
@ToString
public class Article {
  private String articleId;
  private String title;
  private String author;
  private String content;
  private long likes;
}

(4) @Data

  • @Data 애노테이션은 위에서 사용한 @Getter, @Setter, @ToString을 모두 포함한다. 그 외에 @EqualsAndHashCode도 포함한다.
@Data
public class Article {
  private String articleId;
  private String title;
  private String author;
  private String content;
  private long likes;
}

(5) @NotNull

  • @NotNull 애노테이션을 사용하면, 도메인 클래스의 특정 값에 NotNull이라는 조건을 추가할 수 있다.
@Data
public class Article {
  @NotNull private String articleId;
  private String title;
  private String author;
  private String content;
  private long likes;
}

(6) 생성자와 관련된 애노테이션

  • 이 외에도 생성자와 관련된 @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor와 같은 애노테이션이 있다.
    • @NoArgsConstructor : 파라미터가 없는 생성자를 생성한다.
    • @RequiredArgsConstructor : 필수 파라미터, 즉 @NotNull이 붙은 필드를 파라미터로 받는 생성자를 생성한다.
    • @AllArgsConstructor : 모든 필드를 파라미터로 받는 생성자를 생성한다.

3. 출처

  • https://projectlombok.org/features/all

태그:

카테고리:

업데이트: