[Java] Lombok 사용 시 주의사항
2023. 4. 15. 18:46ㆍProgramming Languages/Java
문제 상황
Lombok은 Java 기반의 라이브러리로 getter/setter, toString, equals, hashCode 등 여러 반복적이고 귀찮은 코드들을 애너테이션 선언만으로 컴파일 시점에 바이트 코드를 조작해서 넣어준다. 그런데 만약 애너테이션을 선언했는데 개발자가 직접 코드를 작성했다면 어떻게 될까?
테스트
롬복만 추가한 프로젝트에서 진행했다.
plugins {
id 'java'
}
group = 'io.jeidiiy'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
compileOnly 'org.projectlombok:lombok:1.18.26'
annotationProcessor 'org.projectlombok:lombok:1.18.26'
testCompileOnly 'org.projectlombok:lombok:1.18.26'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.26'
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
}
test {
useJUnitPlatform()
}
애너테이션만 선언 시
Item이라는 클래스를 만들고 @Data를 선언했다. 참고로 @Data는 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode를 묶어놓은 애너테이션이다.
의도한 대로 getter/setter, equals, hashCode, toString이 모두 만들어졌다.
애너테이션 선언 후 정의 시
그렇다면 직접 정의한 경우 어떨까? getter와 equals를 재정의했다.
getter와 equals는 직접 정의한대로 만들어졌고 나머지 setter, toString은 롬복에 의해 만들어졌다. 그리고 실행 창에는 다음과 같은 경고가 떴다.
E:\LombokTest\src\main\java\Item.java:3: warning: Not generating hashCode: One of equals or hashCode exists. You should either write both of these or none of these (in the latter case, lombok generates them). @Data
equals가 이미 있으므로 hashCode가 만들어지지 않았다는 뜻이다.
결론
롬복을 쓰려면 직접 정의하면 안 된다. 간단한 테스트였지만 나중에 혹시나 발생할 수도 있는 문제이므로 좋은 경험이었다.
'Programming Languages > Java' 카테고리의 다른 글
[Java] 인증번호 생성 방법 (0) | 2023.03.28 |
---|---|
[Java] ArrayList의 capacity, size, 그리고 add(int index, E element) (0) | 2023.03.16 |
[Java] VSCODE에서 MAVEN 프로젝트에 MySQL JDBC 연동 (1) | 2021.12.11 |
[Java] 메서드 시그니처 (0) | 2021.12.04 |
[Java] Equals and HashCode (0) | 2021.10.19 |