728x90
반응형
Lombok 이란 ❓❓
자바 Model(DTO, VO, Domain)에서 반복적으로 만들어야하는 것들을(Getter/Setter...) 어노테이션을 통해
코드의 줄을 줄여주고, 가독성을 높이는 데에 굉장한 도움을 주는 라이브러리 입니다.
간단한 예제를 먼저 보여드리겠습니다.
Getter / Setter
기존방식 경우 위처럼 객체를 사용하기 위해 배가 되는 줄을 반복적으로 만들어야하는 일이
빈번히 발생하곤 합니다.
위처럼 getter와 setter를 비롯하여 toString, Builder 등을 더 만들게 되면
더 많은 줄이 생기게 될 것입니다.
이를 매우 간편하게 줄여주는 도구가 lombok입니다.
위처럼 불필요한 줄들을 줄여 가독성면을 높이게 됩니다.
오른 쪽 면을 보시면 getter와 setter가 각 객체별로 생기시는 걸 보실 수 있습니다.
그러면 lombok은 어떤 것들이 더 존재할까요?
Annotation | 설명 |
@AccessLevel | enum 타입으로 접근권한을 제한해줍니다. |
@AllArgsConstructor | 모든 멤버 필드에 대해 파라미터로 받는 생성자를 생성해줍니다. |
@Builder | 빌더를 만들어주어 빌더패턴을 사용할 수 있게 해줍니다. |
@Cleanup | Scope가 종료될 때 자동으로 close()가 호출된다. |
@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사용을 권장합니다. |
728x90
반응형
'JVM > Spring' 카테고리의 다른 글
[SPRING] AOP 우선순위 설정하기. (2) | 2021.08.14 |
---|---|
[SPRING] @Transactional (트랜잭션) 강제 롤백 (0) | 2021.07.25 |
[SPRING] Spring AOP Proxy - @Transactonal 사용 시 주의사항 (0) | 2021.07.25 |
[SPRING] feign은 뭘까? (0) | 2021.04.18 |
[SPRING]@Transactional Annotation 알고 쓰자 (0) | 2021.04.17 |