개요
안녕하세요. J4J입니다.
이번 포스팅은 Lombok에 대해 적어보는 시간을 가져보려고 합니다.
Lombok이란?
롬복은 개발자의 노가다(?)성이 짙은 단순 반복 작업을 덜어주기 위한 라이브러리로 데이터 접근을 위한 객체인 DTO의 캡슐화하는 작업들을 자동으로 해줍니다.
또한 로그를 찍기 위해 loggerFactory 등을 사용하던 것도 단순히 어노테이션만 추가하면 로그를 출력할 수 있도록 해줍니다.
장점
롬복의 가장 큰 장점은 반복적인 단순 작업을 안 하도록 도와준다는 겁니다.
일반적으로 DTO 클래스를 작성할 때 접근 지정자가 private인 변수들을 작성한 뒤 getter, setter는 기본이고 필요에 따라 생성자, toString 등을 작성해줍니다.
DTO 클래스가 적을 경우는 큰 체감을 느끼지 못하지만 한 번에 10개의 DTO만 추가한다고 가정하더라도 매우 귀찮은 작업이 될 수 있고 작업 도중 변수 하나를 변경하게 될 경우 getter, setter도 추가적으로 작성해야 되는 번거로움이 있습니다.
하지만 롬복이 설치되어 있다면 개발자는 private인 변수들만 작성하고 나머지 작업들은 롬복이 알아서 해줍니다.
변수가 변경되더라도 변수 명만 변경해주면 되기 때문에 의미 없는 작업 시간을 대폭 줄일 수 있습니다.
단점
롬복의 단점은 개인 PC마다 롬복이 모두 설치되어 있어야 하는 것입니다.
물론 롬복을 사용하기 위해 maven을 이용한 dependency를 필요로 하지만 추가적으로 IDE마다 설치 파일을 적용시켜줘야 하기도 합니다.
이 부분은 GitHub, SVN 등을 이용해서 서로 공유할 수 없기 때문에 정말 유일한 단점이라고 생각합니다.
적용 방법
※ 스프링과 관련된 코드는 모두 STS-3.9.12.RELEASE 버전을 기준으로 작성되었습니다.
[ 1. IDE에 적용하기 위한 롬복 jar파일을 다운로드 ]
[ 2. 명령 프롬프트(cmd)를 실행시켜 jar파일 다운로드 위치로 이동 (바탕화면에 다운로드했을 경우 C:\Users\(사용자)\Desktop으로 이동) ]
[ 3. cmd에 jar파일 실행을 위한 명령어 입력 ]
java -jar lombok.jar
[ 4. Specify location...을 클릭하여 롬복 적용을 위한 IDE의 exe파일 선택 (Eclipse, STS 등) ]
[ 5. 적용할 IDE 체크 후 Install / Update ]
[ 6. 설치 완료 창 확인 ]
[ 7. pom.xml에 dependency 추가 ]
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
사용 방법 (캡슐화)
※ 스프링과 관련된 코드는 모두 STS-3.9.12.RELEASE 버전을 기준으로 작성되었습니다.
위의 적용 방법을 모두 마쳤다면 준비는 모두 끝났습니다.
먼저 기존 방식대로 DTO 클래스를 생성할 때 getter, setter 등을 모두 작성해보겠습니다.
package com.spring.lombok.dto;
public class LombokDTO {
private String name;
private int level;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
@Override
public String toString() {
return "LombokDTO [name=" + name + ", level=" + level + "]";
}
}
그리고 단위 테스트를 위한 클래스를 생성하여 테스트를 해보겠습니다
※ 단위 테스트에 대해 모르신다면? 2021/02/04 - [IT/Spring] - [Spring] 단위 테스트(JUnit Test)
package com.spring.lombok;
import static org.junit.Assert.*;
import org.junit.Test;
import com.spring.lombok.dto.LombokDTO;
public class lombokTest {
@Test
public void EncapsulationTest() {
LombokDTO lombokDTO = new LombokDTO();
lombokDTO.setName("lombokTest");
lombokDTO.setLevel(3);
assertEquals("lombokTest", lombokDTO.getName());
assertEquals(3, lombokDTO.getLevel());
}
}
테스트를 진행할 경우 문제가 없는 것을 확인할 수 있습니다.
이번에는 DTO 클래스에서 getter, setter 등을 모두 지우고 어노테이션을 이용하여 롬복을 적용해보겠습니다.
package com.spring.lombok.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data // getter, setter, toString 등
@NoArgsConstructor // 디폴트 생성자
@AllArgsConstructor // 모든 변수에 대한 생성자
public class LombokDTO {
private String name;
private int level;
}
위와 같이 DTO 클래스가 다이어트를 심하게 했지만 작성된 단위 테스트를 다시 실행할 경우 문제가 없는 것을 확인할 수 있습니다.
사용 방법 (로그)
※ 스프링과 관련된 코드는 모두 STS-3.9.12.RELEASE 버전을 기준으로 작성되었습니다.
이번에는 롬복을 이용하여 로그를 출력해보겠습니다.
기존에 로그를 사용하던 방법은 위에 링크를 걸어둔 단위 테스트 포스팅을 참고하시면 됩니다.
로그를 출력하기 위해서도 어노테이션 하나만 추가하면 log라는 변수가 자동으로 생성됩니다.
단위 테스트 클래스에 logTest메서드를 작성해보겠습니다.
package com.spring.lombok;
import static org.junit.Assert.*;
import org.junit.Test;
import com.spring.lombok.dto.LombokDTO;
import lombok.extern.slf4j.Slf4j;
@Slf4j // 로그 사용을 위한 어노테이션
public class lombokTest {
...
@Test
public void logTest() {
LombokDTO lombokDTO = new LombokDTO();
lombokDTO.setName("lombokTest");
lombokDTO.setLevel(3);
// 어노테이션만 추가하면 log변수 사용 가능
log.info("lombokDTO.getName(): " + lombokDTO.getName());
log.info("lombokDTO.getLevel(): " + lombokDTO.getLevel());
}
}
위와 같이 작성하고 실행할 경우 console창에 다음과 같이 출력이 됩니다.
INFO : com.spring.lombok.lombokTest - lombokDTO.getName(): lombokTest
INFO : com.spring.lombok.lombokTest - lombokDTO.getLevel(): 3
추가적으로 기존에 로그 작성을 위한 방법도 단위 테스트 클래스뿐만 아니라 다른 클래스 아무데서나 사용할 수 있었습니다.
롬복이라고 예외는 없기 때문에 컨트롤러, 서비스 등의 다른 클래스 들에서도 어노테이션만 추가하면 위와 동일하게 로그를 출력할 수 있습니다.
정리
이상으로 Lombok에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
'Spring > Spring' 카테고리의 다른 글
[Spring] 파일 업로드 - MultipartFile(With. React) (0) | 2021.03.04 |
---|---|
[Spring] Swagger (0) | 2021.03.03 |
[Spring] Filter / Interceptor (0) | 2021.03.01 |
[Spring] Rest API / @RestController(2) (0) | 2021.02.27 |
[Spring] Rest API / @RestController(1) (2) | 2021.02.24 |
댓글