Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

히콩쓰 개발 일지

Primitive Type(원시타입)과 Wrapper Class(래퍼 클래스) 의 Getter 본문

Spring

Primitive Type(원시타입)과 Wrapper Class(래퍼 클래스) 의 Getter

용히콩 2023. 11. 22. 22:44

문제 분석

To-Do List를 개발하던 도중, "완료 된 할일 인가?" 를 표현하기 위해 아래와 같은 코드를 작성하였다.

public class Card extends Timestamped{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "card_id")
    @Getter
    private Long cardId;
    @Getter
    private String cardTitle;
    @Getter
    private String cardContent;
    @Getter
    private boolean isCompletion;

이 때, private boolean isCompletion 이라는 필드에서 문제를 겪었다.
아래는 Service에서 전체 카드를 조회하도록 구현한 코드이다. 오류가 발생하는 것을 확인할 수 있다.

 

하지만 자동완성 기능을 이용해보면, 아래와 같이 isCompletion() 으로 작성해주고, 더이상 오류가 발생하지 않는다.

무엇이 문제인가 싶을 수 있지만, for문을 보면 Dto에 add 하는 부분에서 다른 것은 모두 "get"이라는 접두사로 시작하는데 isCompletion이라는 필드만 "get" 접두사로 시작하지 않는 것을 확인할 수 있다.

 

 

여기서 든 생각은, 아래 두 가지 이다.

  • isCompletionprivate인데 어떻게 저렇게 접근했는가?
  • 변수명을 저렇게 설정한 것이 내부적으로 내가 모르는 로직을 거친건가? 왜 isCompletion만 get으로 접근이 안되지?

문제 해결

문제 원인을 알기 위해 구글링 해보니, Primitive TypeWrapper Class 의 Getter 표현방식 차이였다.

  • Primitive Type은 Getter가 "is" 접두사를 사용한다.
  • Wrapper Class는 Getter가 "get" 접두사를 사용한다.

isCompletion이라는 변수는 boolean 이므로 get.속성 으로 접근할 수 없었던 것이다.

따라서, 아래와 같이 코드를 수정하였다.

public class Card extends Timestamped{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "card_id")
    @Getter
    private Long cardId;
    @Getter
    private String cardTitle;
    @Getter
    private String cardContent;
    @Getter
    private Boolean isCompletion;

그리고, Service 에서도 정상적으로 get으로 속성값을 가져올 수 있었다.

    // 전체 카드 조회
    public CardViewAllResponseDto viewAllCard(){
        List<Card> cardList = cardRepository.findAll();
        CardViewAllResponseDto cardViewAllResponseDto = new CardViewAllResponseDto();
        for (Card c : cardList) {
            cardViewAllResponseDto.add(c.getCardId(), c.getCardTitle(), c.getUser().getUserName(),
                    c.getCreatedAt(), c.getIsCompletion());
        }
        return cardViewAllResponseDto;
    }

 

실제로 getIsCompletion으로 오류 없이 값을 가져오는 것을 확인할 수 있다!

 

 

+ 그렇다면 왜 isCompletion이라는 변수를 Getter로 가져오는데 isisCompletion이 아니었는가...? 에 대해서는 차차 찾아보고 정리해보도록 하겠다....