본문 바로가기
Spring/Spring-detail

Integer 와 int 차이

by YoonJong 2022. 10. 5.
728x90

게시판(회원) 관련 코드를 작성하고 테스트 과정 중에 궁금증이 생겨 정리하게 되었다.

 

먼저 정리한 표이다.

타입 종류 초기화 사이즈 변환
int Primitive 자료형 0으로 초기화 4 byte int -> Integer (Boxing)
Integer Wrapper 클래스 null 로 초기화 20 byte  Integer -> int (UnBoxing)

Member.class

...
@Column(nullable = false, length = 30)
private int age; //나이
...

TestCode 에서 분명 런타임에러가 나야하는데.. 왜 정상작동이 되지 라는 의문이 들었다.

그래서 log를 찍어보았다.

//회원저장시 나이가 없으면 오류
@Test
void 오류_회원저장시_나이_없음() {
    //given
    Member member = Member.builder()
            .username("username")
            .password("1234")
            .name("name")
            .nickName("nickName")
            .role(Role.USER)
            .build();
    //when // then
    log.info("member.age={}", member.getAge());
    memberRepository.save(member);

    assertThrows(RuntimeException.class, () -> memberRepository.save(member));
}

 

나는 빌더 생성에서 age를 넣지 않았는데 0 으로 자동초기화가 되어있었다.

이유는 Member.class 에서 age 타입을 int 했기 때문이다.

 

int 는 null 로 초기화할 수 없다.

따라서, 자동으로 값을 설정해주지 않으면 자동으로 0 으로 초기화가 된다.

 

Integer 을 변경 후, 테스트 코드 실행했을 때는 null 타입으로 초기화되었다.

정상적으로 테스트 코드를 실행할 수 있었다.

728x90

댓글