
프로젝트에서 Lombok을 사용 중이고, 다음과 같이 @Getter로 필드에 접근자를 자동 생성하고 있었다.
@Getter
private String Username;
프로젝트를 진행하던 중 대문자로 들어가있는 필드명을 발견했고 가볍게 소문자로 바꿨다. 그런데 해당 게터를 쓰는 부분 모두에서 에러가 나왔고 이게 무슨일인가 확인해 봤다.
알고보니 Lombok의 @Getter, @Setter는 필드명을 기반으로 자동으로 메소드 이름을 생성한다.
→ 필드명이 바뀌면 메소드명도 같이 바뀌기 떄문에 문제가 발생했다는 사실을 알았다.
해당 필드에 대해서만 Lombok의 자동 메소드 생성을 끄고, 직접 원하는 메소드 이름으로 정의한다.
@Getter(AccessLevel.NONE)
private String Username;
public String getUserName() {
return username;
}
이렇게 하면 필드명을 name, nickname, userDisplayName 등으로 바꿔도 getUserName() 메소드 이름은 유지됨.
해당 필드만 보면 Lombok 없이 수동 getter 쓴 것과 같지만,
이렇게 적용하면, 혼합 전략을 사용할 수 있다.
사실 근데 그럴일은 거의 없을 것 같긴 하다.
@Getter
public class User {
private String id; // → getId()
@Getter(AccessLevel.NONE)
private String name;
public String getUserName() {
return name;
}
}
→ id는 Lombok 자동 처리, name만 메소드 이름 고정
| 방법 | 설명 | 장점 | 단점 |
|---|---|---|---|
| Lombok 자동 | @Getter, @Setter 사용 | 코드 간결, 빠름 | 필드명 바꾸면 메소드명도 바뀜 |
| 수동 getter | 직접 메소드 정의 | 메소드명 고정 가능 | 귀찮음 |
| 혼합 전략 (추천) | Lombok + 필요한 곳만 수동 처리 | 유연함, 유지보수 편리 | 규칙 필요 |
사실 그냥 롬복 잘 사용하고 필드명 실수 안하면 되는 문제였다. 다음부턴 더 꼼꼼히 보도록..!