스프링을 복습하던 중, 갑자기 의문이 들었다.
Entity의 변수는 어떤 타입을 사용해야할까? primitive type? wrapper type?
primitive type vs wrapper type 👩🏫
- 기본형(primitive type)
- boolean, char, byte, short, int, long, float, double
- 계산을 위한 실제 값이 스택(Stack)에 저장된다.
- 참조형(wrapper type, reference type)
- 객체의 주소를 저장한다. 주소값을 저장하는 공간인 힙(heap) 메모리에 저장된 주소를 스택에서 참조한다.
- null 값을 가질 수 있다.
wrapper type과 primitive type을 혼용할 경우, Boxing 및 UnBoxing을 거치게 되면서 성능이 저하될 수 있다. 따라서, JPA Entity의 변수 타입을 하나로 통일하는 것이 좋다.
Hibernate 공식 문서의 추천대로 wrapper type을 사용하는 대신, NullPointerException이 발생하지 않도록 유효성 체크를 해야겠다!
[참고자료]
https://velog.io/@d-h-k/JPA-Entity-Class-%EC%97%90%EC%84%9C-Primitive-Type-%EC%9D%84-%EC%8D%A8%EC%95%BC%ED%95%A0%EA%B9%8C-Wrapper-Class-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC%ED%95%A0%EA%B9%8C
https://velog.io/@chiyongs/JPA-Entity-Wrapper-class-or-Primitive-type
https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html
포스팅 잘 봤습니다! Entity 변수 타입 설정에 대한 고민을 해결할 수 있겠네요
NullPointerException에 대해서도 간략하게 정리하면 좋을 것 같아요!
예를들어, NPE는 객체에 값이 할당되지 않은 상태에서 호출될 경우 발생하는데 Wrapper 타입은 Primitive 타입을 객체로 포장한 형태이므로 NPE가 발생할 수 있다. 와 같은 개념을 추가해도 좋겠네요 😃
저는 Response를 내려줄 때 반환되는 JSON 값에서 Boolean의 is가 생략되는 문제가 생겨 Vo를 생성할때 Reference Type을 사용해서 해결한 경험이 있는데, 실제로 Reference Type을 추천하는군요! 덕분에 다시한번 정리할 수 있었습니다 :)