JVM/Spring

[SPRING] lombok 활용

Hyo Kim 2020. 12. 27. 16:20
728x90
반응형

Lombok 이란 ❓❓

자바 Model(DTO, VO, Domain)에서 반복적으로 만들어야하는 것들을(Getter/Setter...) 어노테이션을 통해

코드의 줄을 줄여주고, 가독성을 높이는 데에 굉장한 도움을 주는 라이브러리 입니다.

 

간단한 예제를 먼저 보여드리겠습니다.

 

Getter / Setter

lombok이 없을 시

기존방식 경우 위처럼 객체를 사용하기 위해 배가 되는 줄을 반복적으로 만들어야하는 일이

빈번히 발생하곤 합니다.

위처럼 getter와 setter를 비롯하여 toString, Builder 등을 더 만들게 되면

더 많은 줄이 생기게 될 것입니다.

 

이를 매우 간편하게 줄여주는 도구가 lombok입니다.

lombok 사용 시

위처럼 불필요한 줄들을 줄여 가독성면을 높이게 됩니다.

오른 쪽 면을 보시면 getter와 setter가 각 객체별로 생기시는 걸 보실 수 있습니다.

 

그러면 lombok은 어떤 것들이 더 존재할까요?

Annotation 설명
@AccessLevel enum 타입으로 접근권한을 제한해줍니다.
@AllArgsConstructor 모든 멤버 필드에 대해 파라미터로 받는 생성자를 생성해줍니다.
@Builder 빌더를 만들어주어 빌더패턴을 사용할 수 있게 해줍니다.
@Cleanup Scope가 종료될 때 자동으로 close()가 호출된다.
@ConfigurationKeys 모르겠어요..ㅠ
@CustomLog 로그에 관한 어노테이션인 것 같습니다. 주로 @Slf4j 를 많이 사용합니다.
@Data @code @Getter @Setter @RequiredArgsConstructor @ToString @EqualsAndHashCode 어노테이션들을 전부 만들어줍니다.
@Delegate 특정 클래스의 메소드를 다른 클래스로 위임합니다.
@EqualsAndHashCode qulas와 hashcode 메소드를 만들어줍니다.
@getter / @setter getter / setter 의 메소드를 생성
@NoArgsConstructor 파라미터가 없는 생성자를 만들어줍니다.
@NonNull 선언한 객체 setter에 null이 들어오면 NullPointException를 발생시켜 Null방지를 시켜줍니다.
@RequiredArgsConstructor @NonNull이나 final인 필드 값만 파라미터로 받는 생성자를 생성해줍니다.
@Singular 컬렉션으로 된 필드에 선언하면, 모든 원소를 한 번에 넘기지 않고 원소를 하나씩 추가할 수 있습니다.
@SneakyThrows 메소드 선언부에 사용되는 throws키워드 대신 사용합니다. 예외클래스를 파라미터로 받습니다.
(논란이 되는 어노테이션 / lombok 홈페이지에서는 다음과 같은 상황에서 사용하라고 합니다.)
- Runnable 같은 인터페이스
- 발생할 수 없는 예외
@Synchronized 자바의 synchronized를 사용하면 객체 레벨에서 락이 걸려 여러가지 문제가 발생될 수 있지만,
이 어노테이션을 사용하면 가상의 필드 레벨에서 보다 더 안전하게 락을 걸어줍니다.
@ToString toString 메소드를 생성합니다.
@val 지역변수에만 사용이 가능하고 final과 비슷한 효과를 갖습니다. 타입 또한 유추가 가능하기 때문에 타입을 따로 붙이지 않고 지역변수를 선언할 수 있습니다.
@Value 불변 클래스를 만듭니다. (setter 사용 불가)
@var final 키워드가 적용되지 않는다는 점은 제외하곤 val 과 동일합니다.
특정 표현식, 타입을 추론하지 못하는 이슈가 빈번하여,
자바10부터는 var를 제공하기 때문에 자바10에서 제공하는 var사용을 권장합니다.
@With 객체를 복제해주는 것 같다.. 잘은 모르겠다..

 

728x90
반응형