Spring/Spring-detail

Integer 와 int 차이

YoonJong 2022. 10. 5. 10:17
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