Lombok 사용시 is prefix 는 왜 없어질까 ?

mallin·2022년 4월 16일
1

JAVA

목록 보기
5/6
post-thumbnail

isNew 라는 신상품 여부를 나타내는 변수가 있었는데 response 로 DTO 내려줄 때 is 가 사라지고 new 라고만 계속 보여졌다.

그냥 new 로 쓰면 되겠지 .. 했는데 프론트에서 new 가 예약어라 사용하기 어려우니 다른 걸로 변경해달라고 요청이 들어왔다.

근데 왜 is 는 사라지는 걸까 ?

https://media.giphy.com/media/7K3p2z8Hh9QOI/giphy.gif

그건

바로바로

바로바로바로바로바로

@Lombok 때문이다.

Lombok 은 boolean 타입일 때 변수의 prefix 가 is 인 경우 getIsNew() 대신, isNew() 라고 get 메소드를 만든다.

PackageDto 라는 Dto 를 하나 만들고, boolean 타입인 변수를 하나 만들어보자.

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class PackageDto {
    Boolean isNew;

}

😇 Lombok 이 자동으로 만들어준 메소드 확인하기
command + 7 버튼으로 Structure 의 메소드를 보면 된다.
EX)

Structure 로 만들어진 메소드를 확인해보면

@Getter 로 만들어진 메소드
getIsNew() 가 아니라 isNew() 이고,

@Setter 로 만들어진 메소드
setIsNew() 가 아니라 setNew() 인 걸 확인 할 수 있다.

Boolean 일 때에는 정상적으로 get, set 메소드가 생성된다.

즉, 변수가 boolean 일 때 Lombok 은 앞에 is 프리픽스를 붙여서 메소드를 자동 생성해준다.

자세한 내용은 Lombok 공식 문서 참고 👉 Getter, Setter 관련 공식문서

해결하는 방법으로는 총 두가지가 있다
1️⃣ Boolean 타입 사용하기

Boolean 같은 경우 Lombok 에서 get 메소드를 만들 때 is 가 아닌 get 으로 get 메소드를 생성한다. 하지만 값에 null 값이 들어가선 안되는 경우 2번째 방법을 사용하는게 더 바람직하다.

2️⃣ getIsXXXX() getter() 메소드를 직접 작성하기


해석해보자면,

동일한 이름(대문자와 소문자를 구분하지 않음)과 동일한 매개 변수 수를 가진 메서드가 이미 있으면 메서드가 생성되지 않습니다. 예를 들어 메서드 'getFoo(String...)'가 이미 있으면 'getFoo()'가 생성되지 않습니다. x)"기술적으로 그 방법을 만드는 것이 가능할지라도 말입니다.

와 같은 의미다.

getIsNew() 를 작성하면 이미 isNew 에 대한 getter 메소드는 있구나 라고 판단하고 isNew 에 대한 get 메소드를 만들지 않는다.

0개의 댓글