처음 개발을 배웠을때는 이렇게 만드는구나 하고 클론코딩을 진행했는데 왜 Long 타입을 사용하는지 모르고 사용했다..
나는 숫자 범위가 넓기 때문에 사용되는 줄 알았는데, 또 다른 이유가 있었다.
숫자 범위가 넓다.
int 일 경우 21억 정도, Long 타입은 엄청나다. ( 전 인구를 합쳐도 부족해; )
NULL 타입을 사용하기 위해서.
엥 무슨말이지? null 타입을 사용한다니
int, long 자료형 같은 경우 원시타입 이라서 null 값을 가지지 못한다. 하지만 Wrapper 클래스인 Integer, Long 타입은 null 값을 가질 수 있다. (Wrapper 클래스란?)
null 값을 가져야 하는 이유는 무엇일까?
- 원시타입을 가져도 괜찮은데, 하이버네이트(JPA 구현체)에서는 참조타입을 사용하게끔 권장함. (Wrapper 클래스 참고)
- JPA 에서 save 간 entity 의 id 타입에 따라 판단한다고 함 (참고 2)
그리고, id 값이 만약 int 형으로 0 이라면 id가 0인 것에 대한 엔티티를 다룰때 애매할 수 있겠다는 생각도 들었다.
Wrapper 클래스란?
자바의 자료형은 2가지인데 매번 보는것이다.
DATA
기본타입 : 값을 저장!
참조타입 : 값을 가리키는 주소를 저장!
위치
기본타입 : Stack 영역
참조타입 : Heap 영역
User user = new User();
heap 영역 : User 객체 생성
stack 영역 : user 는 그 주소값을 참조
Wrapper 클래스도 마찬가지!
Integer a = new Integer(1);
Long b = new Long(1L);
stack 영역이 아닌 heap 영역에 해당 데이터를 가리키는 주소값이 저장됨.
- 즉, 래퍼클래스란, 기본타입 데이터를 객체로 다뤄야할 때, 참조타입으로 다루기 위해 객체로 감싸는 것!
참고자료
https://thalals.tistory.com/330
'2023년 > ETC💁♂️' 카테고리의 다른 글
[ETC] 노션(notion) 사용자 글꼴로 변경하여 사용하기! (배달의 민족 글씨체 적용) (0) | 2023.07.13 |
---|---|
[git] github repository description 추가 또는 바꾸는 방법 (0) | 2023.05.25 |
요약 간단정리 spring data jpa, jpa, hibernate,orm, jdbc api, jdbc driver, dbms (0) | 2023.05.24 |
java spring 프로젝트에서 Builder 패턴을 사용한 이유 (0) | 2023.05.24 |
[React] React + SpringBoot axios 통신간 발생한 cors 에러 해결방법 (0) | 2023.04.14 |