[Lombok] 롬복 사용하기
- 프로그램언어/자바(Java)
- 2021. 6. 21.
롬복(Lombok)이 사실은 호불호가 상당히 많이 갈리는 유틸리티이고, 같이 프로젝트를 진행할 때 롬복을 사용 안해본 사람들이 있다면 더욱 문제가 발생할 수 있는 기능이고 git 등에 공유하기도 힘들어서 적극적으로 추천하는 기능은 아니지만 롬복을 사용하는 추세가 증가하다보니 설정 방법에 대해서 정리해보고자 한다.
우선 롬복이라는 것은 단순히 라이브러리만 세팅해서 되는 기능이 아니다. 그렇게 간단했었다면 롬복을 비선호할 이유도 없었을 것이다.
롬복(Lombok) 이란?
우선 롬복을 사용하는 사람들은 게터(Getter), 세터(Setter) 등을 편리하게 만들어주기 때문에 사용한다고 하지만 필자는 이것이 뭐가 불편한지 모르기 때문에 왜 이것이 편리한지를 되묻고 싶다. Getter, Setter 만들때 수동으로 만드는 것도 아니고 이클립스에서 자동으로 생성하면 그만인 것을 그 기능 때문에 롬복을 사용해서 수많은 어노테이션으로 설정을 하는것이 더 복잡하다 생각 했었다.
결론적으로 말해서 롬복의 기능은 바로 내부적으로 DTO와 같은 모델에서 변수를 지정하면 자바 클래스로 만들 때 setter, getter, toString 등의 메소드를 자동으로 만들어주는 기능이다.
롬복의 장단점
롬복이 편리한 경우는 잦은 변수의 수정이 있을 경우라고 할 수 있겠다. 반대로 오히려 롬복이 불편할 때에는 변수의 설계를 완벽히 한 상태에서 개발을 하는 사람이나 getter, setter 내부에서 로직을 변경해야 될 경우이다.
예를 들어, setter에 받은 paramter는 string으로 받고 내부적으로 이 값의 변경해서 저장 한다면 lombok이 오히려 더 불편할 수 있다.
private List<String> codeList;
public void setCode(String codeNm) {
String[] codeArr = codeNm.split(",");
List<String> codeList = new ArrayList<> ();
for(String code : codeArr) {
if(code.length() > 0) {
codeList.add(code);
} else {
codeList.add("None");
}
}
this.codeList = codeList;
}
위 케이스는 문자열을 split하여 공백인 경우 None값을 저장하는 Setter이다. 물론 이 기능을 외부적으로 별도의 메소드를 만들어서 처리하는 방법이 있지만, 이건 어디까지나 하나의 예일 뿐이고 롬복의 단점은 사실 이것보다 어노테이션(Annotation)을 많은 사람들이 이해를 하고 있어야 하고, 롬복이 버그가 많은 이유일 것이다.
그러나 아직은 많은 사람들이 불편해할 수 있지만 롬복도 끊임없이 버전을 업그레이드하고 있고 언젠가는 롬복을 사용하는 사람이 사용하지 않는 사람을 압도할수 있기 때문에 사용법 정도는 익혀보는 것을 추천하고 싶다.
롬복 설치
롬복을 사용하기 위해서는 메이븐(Maven)이나 그레이들(Gradle)에서 단순히 사용하겠다 설정만 하는 것이 아니라 통합개발환경(Integrated Development Environment, IDE) 툴에 플러그인(Plugin)을 설치해야 한다.
위 경로를 들어가면 아래와 같이 심플하게 중앙에 투박하게 다운로드 텍스트가 있으며, 이 텍스트를 클릭하여 lombok.jar 파일을 저장한다. 검색 창에서 cmd를 입력하여 명령 프롬프트(커맨드 창)를 실행하고, 명령 프롬프트 창에서 lombok.jar가 다운로드 된 곳으로 가서 아래와 같이 java로 lombok.jar를 실행한다.
롬복 파일을 E 드라이브의 Project로 옮겼을 때
E:\>cd Project
E:\Project>java -jar lombok.jar
java -jar로 롬복을 실행하면, 이클립스(Eclipse)나 스프링부트를 위한 STS(Spring Tool Suite)와 같은 IDE를 찾게 된다.
인스톨러(Installer)가 떴으면, Specify location... 이라고 적혀 있는 버튼을 클릭하여 이클립스 계열 경로를 지정한다.
위와 같이 경로를 지정하였으면 Install 버튼을 클릭하여 인스톨을 실행한다
위와 같이 Install / Update 버튼을 실행하면 순식간에 설치가 되며, 이클립스(Eclipse)나 STS를 다시 실행하면 롬복을 사용할 수 있게 된다.
설치는 순식간에 진행되니 프로그레스바가 없다고 해서 놀랄 필요는 없다. Quit Installer를 클릭하여 인스톨 화면을 종료한 후 IDE를 재실행한다. 여기까지 설치가 완료 되었으면 이제 롬복을 적용하는 방법을 실행해본다.
스프링부트(Spring boot)에서 롬복 설정
스프링부트(Spring boot)에서 롬복을 사용하기 위해서 다음과 같이 롬복의 의존성을 추가한다
그레이들(Gradle) 의존성 설정
롬복을 지정하고 스프링부트 프로젝트를 생성하였다면 build.gradle 화면에 다음과 같이 롬복이 생성된 것을 확인할 수 있다.
build.gradle에 추가된 코드
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
메이븐(Maven)에서 롬복 의존성(라이브러리) 설정
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
설정이 완료 되었으면 이제 본격적으로 롬복을 사용하는 코드를 작성해보도록 한다.
롬복 적용 소스 코드
package com.tistory.needjarvis;
import lombok.Data;
@Data
public class LombokVO {
private String text;
}
위와 같이 @Data의 어노테이션(Annotation)을 추가한다.
그레이들이나 메이븐으로 라이브러리를 정상적으로 다운로드 했다면, Import lombok.Data를 import 할 수 있게 되는데 롬복이 정상적으로 작동되고 있는지는 이클립스 우측창의 outline을 확인하면 된다.
LombokVO.java
package com.tistory.needjarvis;
import lombok.Data;
@Data
public class LombokVO {
private String text;
}
우측 Outline 창을 보면 getText, setText 뿐만 아니라 equals, hashCode, toString까지 메소드들이 보이지 않지만 구현이 되어 있는 것을 알 수 있다.
LombokController.java
package com.tistory.needjarvis;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class LombokController {
@RequestMapping("/")
public @ResponseBody LombokVO show() {
LombokVO vo = new LombokVO();
vo.setText("텍스트 세팅");
return vo;
}
}
Controller를 새로 만들어 lombok으로 만들어진 VO를 생성을 한 후, 만들어진 set메소드로 값을 세팅하였고, 이 콘트롤러를 실행하면 JSON 구조로 화면에 뿌려지는 것을 확인할 수 있다.
{
text: "텍스트 세팅"
}
'프로그램언어 > 자바(Java)' 카테고리의 다른 글
[Java] 하위 폴더 및 파일 삭제 (재귀 함수 포함) (0) | 2022.04.10 |
---|---|
[Java] Http URL File download 3가지 방법 (0) | 2021.12.29 |
[Java] StringBuffer vs StringBuilder (0) | 2021.05.31 |
[Java] Tika로 문서에서 텍스트 추출 (문서 필터링) (0) | 2021.05.26 |
StringBuffer의 초기화(Clear)의 3가지 방법 비교 (1) | 2021.05.21 |