-
Lombok 사용시 주의점 (쓰지 말아야 할 Lombok)Spring Boot 2024. 11. 12. 23:44
Modern Java 에서는 Lombok 사용을 지양하고 있다. [참고 : https://www.danvega.dev/blog/no-lombok]
큰 이유는 이러하다.
1. IDE 기능으로 디버깅을 어렵게 한다.
2. Annotation Processing에 충돌을 일으킨다.
3. 숨겨진 코드가 버그를 유발
이에 따라서, Java 17부터 Lombok의 대부분 기능을 대체할 수 있는 record 클래스, Builder가 필요하다면 IDE로 생하길 권장한다.
하지만, 실무에서는 Java 8을 쓰는 것이 대부분이다.
Lombok을 쓰지 않을 수는 없기 때문에 아래의 Lombok 사용법을 꼭 읽어보고 주의해서 사용해야한다.
배달의 민족에서 기술이사로 있는 손권남 님의 블로그를 보면
Lombok best practice가 기록되어 있다.
https://kwonnam.pe.kr/wiki/java/lombok/pitfall#data_%EC%82%AC%EC%9A%A9%EA%B8%88%EC%A7%80
Lombok 요약하면 다음과 같다. (위에 블로그에 코드 예시로 설명이 있으니 정독을 추천한다.)@Data
잠재버그 덩어리다.
1. @EqualsAndHashCode가 포함되어 있는데 버그를 유발한다.
- ex) 동등성 대상 코드가 변경이 될 경우 잡아내지 못하는 버그, 따라서 @EqualsAndHashCode(include = {field})와 같이 사용을 해야한다.
2. @RequiredArgsConstructor
- 생성자 선언시 파라미터 순서를 실수한다거나 할때 잡아내지 못한다. 휴먼에러에 열려있다.
3. @Setter
- 객체지향 안티패턴
4. @ToString
- 연관관계 있는 Entity에 선언 금지. 순환참조 유발@EqualsAndHashCode
- 위에서 언급한 것 처럼 단독으로 선언하면 안된다. 필요하다면 필드를 지정해서 사용해야 하는데 이 마저도 오타와 같은 휴먼에러가 있다.
IDE 기능으로 생성해서 사용하자. (cmd + n 하면 IDE가 만들어준다.)@Value
- @EqualsAndHashCode, @AllArgsConstructor가 포함되어 있다.
@Builder 는 생성자에만, 또는 정적팩터리메서드에만
- @Builder를 선언해서 Builder를 생성하면 private 접근자에도 public으로 접근할 수 있는 생성자를 자동으로 만든다.
- 기껏 정적팩터리 메서드 만들고 private으로 접근 제한 했는데 무효시키는 결과가 될 수 있다.
@ToString 사용 주의
- 선언하지 않으면 log에 객체가 주소값으로 표시된다. 그래서 생각이상으로 자주 선언
- Entity에 절때 선언하면 안된다. 연관관계에도 toString을 만들면서 순환참조 문제가 생긴다.
사실 java17 이후, 그리고 코파일럿 등장 이후 lombok이 없이 개발해도 될 것 같다.
반응형'Spring Boot' 카테고리의 다른 글
Jobrunr 사용한 Springboot에 스케줄링 작업 구현 (0) 2025.01.30 [springboot 예외 처리 안티패턴 정리] Exception Handling Worst Practice (13) 2024.12.30 springboot 애플리케이션 데이터베이스 초기화 (1) 2024.11.08 스프링 개발자가 가장 많이하는 실수 (0) 2024.06.19 Port Adapter 패턴이란? (클린아키텍처) (1) 2024.04.20