Lombok은 자바 컴파일 시점에서 특정 어노테이션으로 해당 코드를 추가할 수 있는 라이브러리입니디. 이는 코드의 다이어트? 가독 성 및 유지 보수에 많은 도움이 됩니다. 하지만 편리한 만큼 잘못 사용하기 쉬운 것이 Lombok 입니다.
1. 설치하기
Lombok 홈페이지로 이동하여 다운로드. ( http://projectlombok.org/download )
다운로드된 jar파일을 실행한다.
자동으로 로컬에 설치된 eclipse와 sts를 찾아주는데 "Install / Update" 버튼을 클릭하면 설치 완료된다.
eclipse나 sts폴더로 가면 lombok.jar 파일이 생성되어 있을것이며, ini 환경파일에 아래와 같은 코드가 추가된다.
2. 사용하기
간단하게 어노테이션만 추가하면 된다.
@Data 어노테이션만 추가했는데, Outline에 getter/setter/toString 메소드가 보인다.
3. 사용시 주의점
@Data는 지양 하자
@Data는 @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor을 한번에 사용하는 강력한 어노테이션 입니다. 강력한 어노테이션인 만큼 그에 따른 부작용도 많다고 생각합니다.
무분별한 Setter 남용
위에서 언급했듯이 @Data를 사용하면 자동으로 Setter를 지원하게 됩니다. 그로 인해서 생기는 문제점들이 있습니다.
간단하게 정리하면 Setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의 안전성이 보장받기 힘듭니다. 예를들어 email의 변경 기능이 제공 되지 않는다고 가정한다면 email 관련된 setter도 제공되지 않아야 안전합니다. 단순 안전함을 넘어서 해당 객체가 자기 자신을 가장 잘 표현하는 구조 즉 email의 변경 포인트를 제공하지 않음으로써 email 변경 기능이 없다는 것을 표현한다고 생각합니다.
ToString으로 인한 양방향 연관관계시 순환 참조 문제
두 객체가 서로 참조할 경우 ToString을 호출하면 무한 순환 참조가 발생합니다. JPA를 사용하다 보면 객체를 Json으로 직렬화 하는 가정에서 발생하는 문제와 동일한 이유입니다. 이 처럼 무분별하게 @Data를 사용하게 되면 이러한 문제를 만나기 쉽습니다.
4. 결론
많은 개발자 환경과 빌드에 해당 라이브러리를 추가하는 작업을 별도로 해야하고, 명시적이지 않게 자동으로 무언가를 해준다는것 자체도 별로 맘에 들지 않는다!
마지막으로 이클립스에서 자동으로 getter/setter/toString 정도는 잘 만들어 주자나!!
그래서 쓰지 않기로 합니다!!
'IT > JAVA' 카테고리의 다른 글
[JAVA] JAVA 버전별 특징 (0) | 2020.09.24 |
---|