변수명 두번째 글자가 대문자 라구요? (feat -Lombok)

Joshua_Kim·2022년 9월 30일
2

개발ISSUES

목록 보기
4/4
post-thumbnail

🌱 서론

  • 외부 API 의 값을 받아오려고 만든 ResponseDto 의 객체중 dTime 이라는 변수가 제대로 매핑이 되지 않고 dtime 이라는 키값으로 매핑이 되어 null 을 반환하는 상황을 마주하였다.

🤖 Trouble 의 시작


@Getter
@Setter
@NoArgsConstructor
public class ResponseDto {

    ...

    @Getter
    @Setter
    @NoArgsConstructor
    public static class DeliveryDetail {

        private String crgNm;

        private String crgSt;

        private String scanNm;

        private String dTime;

        ...
    }

}

  • 위와같이 ResponseDtoinnerClass 중 하나를 만들었는데, 아래의 사진과 같은 현상이 생겼다.

KakaoTalk_Photo_2022-09-30-23-21-47 001

🤔내가 받고 싶은 데이터는 dTime 인데 !!

KakaoTalk_Photo_2022-09-30-23-21-47 002

🥲왜 너는 dtime 으로 받아서 null 인것이냐!!

  • Trouble 상황의 설명

    • 가지고 오고싶은 데이터의 필드명은 dTime 이다.

    • 나는 그것에 맞도록 Response 의 필드명을 dTime 으로 했으나, 실제로 값을 호출하고 받아오는 Response Dataswagger 에서 확인해보니 dtime 으로 매핑이 되어 값이 null 이 되어 날아오게 되었다.


💡 Trouble Shooting

문제는 Lombok 이었다. 🔥

  • Lombok 을 이용한 @Getter, @Setter 의 접근일 경우, 자동으로 카멜 케이스를 이용한 getter, setter 메소드를 만들 때, getDTime(), setDTime() 으로 생성하기 때문에 이러한 문제가 발생한 것이다.

스크린샷 2022-09-30 오후 11 36 30

인텔리 제이에서 Structure (단축키 : command + 7) 에서 확인한 Lombok 으로 생성된 Getter, Setter.
getDTime() 과 setDTime() 을 확인할 수 있다.

  • getter, setter 메소드 명은 get, set 다음에 이어지는 단어는 반드시 대문자로 작성되기 때문이다.

  • 그런데, 여기서 문제는 dTime 변수의 두 번째 글자도 대문자이기 때문에 구분이 되지 않아서 이런 문제가 발생한다.

  • 인텔리제이가 제공하는 Generate Getters and Setters 를 활용하면 메서드명이 getdTime(), setdTime() 으로 생성이되어 접근이 가능해진다.

    @NoArgsConstructor
    public static class DeliveryDetail {

        private String crgNm;

        private String crgSt;

        private String scanNm;

        private String dTime;


        // Lombok 에 의존하지않고 직접 getter, setter 생성
        public String getCrgNm() {
            return crgNm;
        }

        public void setCrgNm(String crgNm) {
            this.crgNm = crgNm;
        }

        public String getCrgSt() {
            return crgSt;
        }

        public void setCrgSt(String crgSt) {
            this.crgSt = crgSt;
        }

        public String getScanNm() {
            return scanNm;
        }

        public void setScanNm(String scanNm) {
            this.scanNm = scanNm;
        }

        public String getdTime() {
            return dTime;
        }

        public void setdTime(String dTime) {
            this.dTime = dTime;
        }
    }

🙋🏻‍♂️ 결론

첫 번째 단어가 한 글자로 시작하며, 소문자이고 카멜케이스로 변수를 사용한다면 주의해서 Getter, Setter 를 생성해야한다.

profile
인문학 하는 개발자 💻

0개의 댓글