처음 개발을 배웠을때는 이렇게 만드는구나 하고 클론코딩을 진행했는데 왜 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 영역에 해당 데이터를 가리키는 주소값이 저장됨.
- 즉, 래퍼클래스란, 기본타입 데이터를 객체로 다뤄야할 때, 참조타입으로 다루기 위해 객체로 감싸는 것!
참고자료
☕ JAVA 데이터 타입 종류 총정리 (int / double / char / String / boolean)
정수 자료형 자바의 정수를 표현하기 위한 자료형은 대표적으로 int, long 이 있다. (byte, short 도 있지만 잘 사용하지 않는다.) 정수형 타입 할당되는 메모리의 크기 데이터의 표현 범위 byte 1바이트
inpa.tistory.com
[JPA] save()시 식별자가 존재하는 경우 어떻게 동작할까? (feat. 코틀린에서 JPA 사용하기)
저는 지금까지 일반적으로 JPA를 사용하는 경우 @Id와 @GenerateValue, 그리고 Long 타입의 id를 사용하였습니다. 항상 id는 직접 할당하지 않았기에 save()시 id의 값은 항상 null이었습니다. 그러다 코틀린
ttl-blog.tistory.com
https://thalals.tistory.com/330
5. JAVA 기본 타입 vs 참조 타입 (with 래퍼클래스를 사용해야할 때) ➡️ Integer(Wrapper Class) 보다 int(
저는 래퍼클래스가, Null을 처리할 수 있기 때문에, 더 범용성이 좋고, 유용하다고 생각했습니다.. 하지만, 온보딩 과제를 진행할때, 매개변수를 사용할 때 래퍼클래스보단, 기본타입을 이용하는
thalals.tistory.com
'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 |