본문 바로가기
[ Concept ]

[ Concept ] Lombok 이란?

by 환이s 2023. 5. 15.


오늘부터 개발자를 준비하면서 라이브러리 및 메서드 등 기능에 필요한 지식 개념에 대해서 포스팅해보려 합니다.

 

현재 팀 프로젝트를 진행하면서 Spring과 Spring Boot에 대해서 공부 중인데, 점점 새로운 기능 및 라이브러리에 대해 알아가면서 반복 코드를 줄이고, 안정성을 높이는 코드를 중점으로 공부를 하고 있지만.. 끝이 없는 것 같습니다..^^ 

 

오늘은 Lombok에 대해서 포스팅해보겠습니다.

 


Lombok 이란?

 

Lombok이란 Java의 라이브러리로 반복되는 메서드를 @(Annotation)을 사용해서 자동으로 작성해 주는 라이브러리입니다. 즉, getter/setter , toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리라고 생각합니다.

 

보통 Model 클래스나 Entity 같은 Domain 클래스 등에는 수많은 멤버 변수가 있고, 이에 대응되는 getter와 setter 그리고 toString() 메서드 그대로 때에 따라서는 멤버 변수에 따른 여러 개의 생성자를 만들어주게 되는데, 거의 대부분 이클립스 같은 IDE의 힘만으로 생성한다고 하지만 이 역시도 번거로운 작업이 될 수 있고, 뿐만 아니라 코드 자체가 반복되는 메서드로 인해 매우 복잡해지게 됩니다.

 

Lombok은 여러 가지  @(Annotation)을 제공하고, 이를 기반으로 코드를 컴파일 과정에서 생성해 주는 방식으로 동작하는 라이브러리입니다.

 

즉, 코딩 과정에서는 Lombok과 관련된 @(Annotation)만 보이고 getter와 setter 메서드 등은 보이지 않지만 , 실제로 컴파일된 결과물(. class)에는 코드가 생성되어 있다는 뜻입니다.

 


 Lombok 사용 시 장점 및 주의사항

 

Lombok은 복잡하고 반복되는 코드가 줄어듦으로써 코드의 가독성을 높일 수 있고 코딩 생산성 또한 높일 수 있습니다. 다만, Lombok이 개발자마다 호불호가 나뉘는 라이브러리로 특정 개발자들은 코드가 직접 눈에 보임으로써 직관성을 유지하는 것이 좋다고 보는 의견도 있는 만큼 자신의 프로젝트나 프로젝트 리더의 성향에 따라 사용하면 좋을 것 같습니다.

 

간단하게 정리해서 Lombok의 장점은 다음과 같습니다.

 

  • @(Annotation) 기반의 코드 자동 생성을 통한 생산성 향상
  • 반복 코드 다이어트를 통해 가독성 및 유지 보수성 향상
  • getter/setter , toString() 등 빌더 패턴이나 로그 생성 등 다양한 방면으로 활용 가능

 

Lombok의 주의사항 및 단점은 간단한 예시를 통해서 말씀드리자면

예를 들어 롬복의 @Data Annotation이나 @toString Annotation으로 자동 생성되는 toString() 메서드는 순환 참조 또는 무한 재귀호출 문제로 인해 StackOverflowError가 발생할 수 있습니다.

 

물론 이 문제를 인지한 Lombok 에서 해결할 수 있는 속성을 제공하지만 Lombok이 편리하다는 이유만으로 마구 사용한다면 여러 가지 예외 문제가 발생할 수 있음을 인지하셔야 합니다.

 

그럼 Java 코드와 Lombok의 차이점에 대해서 알아봅시다.

 


Java 코드 / Lombok

 

예제 코드로 ItemSearchVO 클래스가 있다고 가정해 봅시다.

VO (Value Object) 값 오브젝트로써 값을 위해 쓰입니다. 사용하는 도중에 변경 불가능하며, 오직 읽기만 가능한 read-Only 특징을 갖고 있습니다.

 

레코드를 데이터 맵핑하는 상황으로 갖고, 테스트 코드이기 때문에 getter, setter까지 생성해 보겠습니다.

 

package com.example.demo.item.bean;

import com.example.demo.common.PagingInfoVO;

public class ItemSearchVOtest extends PagingInfoVO {

    private long iidx = -2;
    private String title = "";
    private String content = "";
    private String author = "";


    public long getIidx() {
        return iidx;
    }

    public void setIidx(long iidx) {
        this.iidx = iidx;
    }

    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;
    }
}

 

위 코드처럼 getter/setter 처리를 하는 게 Java 코드입니다. Lombok을 이용한다면 아래와 같이 바뀔 수 있습니다. 

클래스에 @Getter , @Setter 등의 Annotation을 붙여주기만 하면 되는데, 그 또한 생략하고 싶다면 @Data Annotation을 붙여주기만 하면 됩니다.

 

package com.example.demo.item.bean;

import com.example.demo.common.PagingInfoVO;
import lombok.Data;

@Data // @Data => getter,setter 등을 @Data 어노테이션 하나로 사용 (lombok)
public class ItemSearchVO extends PagingInfoVO {
    private long iidx = -2;
    private String title = "";
    private String content = "";
    private String author = "";
}

 


Lombok 적용 방법 

 

먼저 메이븐 프로젝트에 적용하는 방법부터 알아봅시다.

 

메이븐에서는 pom.xml 파일에 아래와 같이 의존성을 추가해 주면 됩니다.

 

<!-- lombok 라이브러리 -->
  	<dependency>
  		<groupId>org.projectlombok</groupId>
  		<artifactId>lombok</artifactId>
  		<version>1.18.6</version>
  	</dependency>

 

그레이들의 경우 build.gradle에 다음과 같이 사용할 수 있습니다.

 

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter'
  compileOnly 'org.projectlombok:lombok'
  annotationProcessor 'org.projectlombok:lombok'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

만약 직접 Lombok을 내려받아야 하는 경우에는 https://start.spring.io/ 주소에 접근하여 DOWNLOAD 하시면 됩니다.

 


마치며

 

오늘은 Lombok에 대해서 알아봤습니다.

팀 프로젝트를 준비하면서 Spring에 좀 더 깊게 파고들다 보니 가독성을 어떻게 해야 높일지... 고민에 빠지네요

Lombok 또한 좋은 라이브러리라고 생각이 들지만, 자주 사용하면 후 폭풍이 걱정입니다..^^

728x90