type
status
date
slug
summary
tags
category
icon
password

결론

  • 컴파일단계에서는 구현코드가 줄어드나, 실행코드가 많은 것은 여전함
  • 코드 자동 생성으로 인해 개발자의 의도와는 다르게 구현될 수 있음(ex 순환참조)
  • Lombok 이 개발자를 도와주는 도구임에는 변함없음
    • 사용자 하기 나름
  • java record를 사용하되, 필요한 기능만 구현해도 무방함
    • (필자는 delombok 후 record + builder 라이브러리로 재구성했음)
  • Lombok 사용자는 지금도 늘고 있으며 커뮤니티도 활발함
    • 향 후 패치에서 점진적으로 개선될 것으로 보임

시작

Student 객체로 데이터를 설계해보자
그리고 아래의 추가 요청사항이 있다고 하자
  1. get/set 설정
  1. 동일한 데이터에 대해 처리하는 로직 추가
  1. 객체 로그 출력 이쁘게
  1. 빌더 패턴 적용
  1. .....
WOW... 😱 BoilerPlate 코드가 많아졌다...
하지만 lombok 을 사용하면
코드가 순식간에 줄어들었다.
불변 객체로써 쓰고 싶다면 클래스 위에 @Value(staticConstructor = "of") 붙이면 된다.
아래와 같이 lombok이 잘 적용된 것을 알 수 있다.

자주 사용되는 기능

@Data

  • 아래의 애너테이션이 모두 포함되어 있음
    • @Getter
    • @Setter
    • @RequiredArgsConstructor
    • @ToString
    • @EqualsAndHashCode

@Value

  • 불변 객체를 만들 때 사용
  • 아래의 애너테이션이 모두 포함되어 있음
    • @Getter
    • @Getter
    • @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
    • @AllArgsConstructor
    • @ToString
    • @EqualsAndHashCode

주의점

  • 편한 만큼 과도한 애너테이션의 남용으로 실제 실행 코드 증가
  • 관례 기반 코드 스타일로 컴파일 단계에서 잠재적 오류를 파악 하기 힘듦

잠재된 오류 예제

아래에 어떤 개발자가 name 만큼은 꼭 받고 싶어서 final 선언했다고 가정하자
실행하면 아래와 같이 null 값이 들어가게 된다.
@ToString 순환 참조 문제도 있다. 코드가 길어질 것 같으니 pass..

대체재. Java record type

자바 14에 첫 등장하여 16에 안정화가 된 record 타입도 있다.
아까 전의 테스트코드와 완벽 호환된다. 값 호출도 get이 아닌 칼럼 명 그대로 호출한다.
 
Flyway내부 클래스
Loading...