type
status
date
slug
summary
tags
category
icon
password
결론
- 컴파일단계에서는 구현코드가 줄어드나, 실행코드가 많은 것은 여전함
- 코드 자동 생성으로 인해 개발자의 의도와는 다르게 구현될 수 있음(ex 순환참조)
- Lombok 이 개발자를 도와주는 도구임에는 변함없음
사용자 하기 나름
- java record를 사용하되, 필요한 기능만 구현해도 무방함
(필자는 delombok 후 record + builder 라이브러리로 재구성했음)
- Lombok 사용자는 지금도 늘고 있으며 커뮤니티도 활발함
향 후 패치에서 점진적으로 개선될 것으로 보임
시작
Student 객체로 데이터를 설계해보자
그리고 아래의 추가 요청사항이 있다고 하자
- get/set 설정
- 동일한 데이터에 대해 처리하는 로직 추가
- 객체 로그 출력 이쁘게
- 빌더 패턴 적용
- .....
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이 아닌 칼럼 명 그대로 호출한다.