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
'Spring > Spring-detail' 카테고리의 다른 글
@valid 를 사용해보자 (유효성 검사) (0) | 2022.10.13 |
---|---|
Swagger 적용하기 - REST API 명세를 문서화 하는 방법 (1) | 2022.10.08 |
@Builder 빌더패턴 (0) | 2022.10.01 |
HTTP 메서드 종류 (0) | 2022.10.01 |
유효성 검사(Validation) (1) | 2022.09.21 |
댓글