[제발 쓰세요!] Lombok 라이브러리 쉽게 쓰기!

안녕하세요.

 

오늘은 자바/스프링을 활용해서 개발할 때 필수적으로 사용하셨으면 좋을 라이브러리를 소개하고자 합니다.

 

사실 많은 분들이 이미 아실거에요! Lombok 라이브러리 입니다. 

sas-study.tistory.com/260

 

[Spring] 스프링 프레임워크 Lombok 라이브러리

Lombok - 자바 개발시 자주 사용하는 getter/setter, toString(), 생성자 등을 자동으로 생성해주는 라이브러리. - @Data, @Getter, @Setter, @ToString 등의 어노테이션 방식을 이용한다. - @Data 어노테이션은..

sas-study.tistory.com

이전에도 포스팅했던 적이 있는데요! 설치 방법을 올린적이 있었는데 인텔리제이에서 설치하는 방법은 다음과 같습니다.

 

인텔리제이 롬복 설치방법

1. shift 두번 누르기 -> plugins -> lombok 검색

 

2. shift 두번 누르기 -> annotation processors 검색

annotation processor를 enable 하게 하는 이유는 IDE 내부 컴파일러가 어노테이션을 컴파일할 때 Lombok의 어노테이션을 인식하여 처리할 수 있도록 합니다.

 


 

@Getter/@Setter

롬복은 주로 어노테이션으로 동작하기 때문에 여러 어노테이션이 존재합니다. 가장 대표적으로 쓰는 어노테이션은 아무래도 @Getter/@Setter 일 것입니다.

 

말 그대로 VO 나 DTO 따위의 클래스의 Getter / Setter 메소드를 정의해주는 어노테이션입니다. 실제 이클립스/인텔리제이의 자동생성 기능이 있지만 굉장히 많은 변수를 가진 클래스라고 생각해보시면.. 이걸 쓰느냐 안쓰느냐는 스크롤의 고통을 벗어나느냐 아니냐로 바뀔 수 있습니다...!

 

 

생성자 어노테이션

- @NoArgsConstructor : 생성자의 인자가 없는 가장 기본 생성자입니다. 예컨데 JPA의 @Entity 클래스는 기본 생성자를 protected 처리하도록 권장받고 있는데! 이때는 @NoArgsConstructor(access = PROTECTED) 이런식으로도 사용할 수 있습니다.

- @AllArgsConstructor : 클래스의 생성자에 모든 멤버변수를 인자로 받아 생성하는 어노테이션입니다. 타당한 이유가 없다면 자주 쓰지는 않는것 같아요.

- @RequiredArgsConstructor : 클래스의 멤버변수 초기화에 필요한 값만 받는 어노테이션입니다. 예컨데 클래스의 String 멤버변수로 final 키워드가 선언되어있고, 일반 Integer @RequiredArgsConstructor 어노테이션이 선언되어 있다면 String 변수만 생성자의 인자로 선언해주고 초기화하는 코드를 생성합니다.

 

 

@Builder

객체를 초기화할 때 사용하는 어노테이션 패턴이다. 객체를 초기화할 때 좀더 선언적으로 사용할 수 있다.

코드를 보면 다음과 같이 처리할 수 있다.

AddUserParam param = AddUserParam.builder().nickname("닉네임").password("password").build();

변수 초기화가 상당히 직관적이고 명확하다. 개인적으로 잘 사용하는 어노테이션인데 이는 필수적으로 전체 멤버를 인자로 받는 생성자가 필요하다. 즉, @Builder@AllArgsConstructor는 단짝이라고 볼 수 있다. 실질적으로 Builder 패턴이 동작하는 방식이 All Args Constructor 기반이기 때문이다.

 

 

@EqualsAndHashCode

equals() 메소드와 hashcode() 메소드를 생성해주는 어노테이션이다. 많이 쓰지는 않지만 Entity의 경우 seq라는 컬럼(DB의 PK)을 객체의 키로 봤을 때, 인스턴스가 다른경우 equals가 false로 찍힐 수 있다. 이러한 경우 @EqualsAndHashCode(of = "seq") 로 한다면  seq 라는 이름을 가진 멤버변수를 equals의 키로 보고 비교한다. 주로 이러한 경우를 제외하면 많이 쓰지는 않았던것 같다.

 

 

@ToString

그나마 또 가장 많이 사용하는 어노테이션인데. 맞다. VO나 DTO 따위의 객체의 현재 값을 출력할때 toString() 메소드를 호출한다. 딱히 설명은 더 하지 않겠다.

 

 

@Data

@Data 어노테이션은 Getter/Setter/ToString/RequiredArgsConstructor 등의 여러 어노테이션을 합친 효과를 발휘하는 어노테이션이다. 따라서 프로젝트마다 단지 Getter/Setter/ToString 만 필요한 경우 @Data만 붙이면 바로 코드도 깔끔해지고 정갈해지니 많이들 쓸 것이다.

하지만 좀더 생성자를 활용하거나 빌더패턴을 활용하고 싶으면 결국 각각의 어노테이션을 활용해야하고 불필요한 기능이 추가되므로 필자는 각각 필요한 어노테이션들을 선언해서 처리하는 편이다.

 

 


 

롬복은 정말정말 편리한 라이브러리이다. 주로 VO나 DTO 따위의 객체에 선언하는 어노테이션 위주로 설명을 했지만 유효성 검사를 위한 @NonNull도 제공해주고 @Synchronized나 @SneakyThrows 같은 기능도 제공해준다. 

 

아직도 스프링 프로젝트에 Lombok이 적용되지 않았다!? 라면

 

"그것은 레거시다" 라고 이야기해도 과언이 아닐 정도인 것 같다. 그러니 제발 쓰세요!!

 

이상입니다. ㅎㅎ

댓글

Designed by JB FACTORY