2023. 3. 27. 15:18ㆍProject/시네마그램
현재 면접 스터디를 진행 중에 있습니다.
개인 프로젝트 관련해서 받았던 질문들 중 대답을 잘하지 못했던 부분들은 따로 정리하고자 합니다.
질문
코드를 봤는데, 개인 프로젝트에서 엔티티 id가 전부 int형을 썼던데 이유가 있었는지 궁금합니다.
🤔
해당 프로젝트를 할 때는 인지하지 못했지만, 다른 분들의 코드를 보면 JPA Entity 클래스에서 id를 Long타입으로 설정한 것을 심심치 않게 볼 수 있었습니다.
그런데 왜 long이 아닌 왜 Long타입을 사용했을까요?
구글링을 했을 때, 크게 두 가지 이유로 Wrapper Class(Long)을 선호한다는 것을 알게 되었습니다.
1. null을 사용할 수 있다.
primitive type은 기본값이 0입니다. 그럼 id가 없을 때는 나타낼 수 없게 됩니다.
즉, id가 없어서 0으로 초기화가 된건지 아니면 실제 값이 0인지 데이터만 보고 판별할 수 없는 문제점이 있습니다.
반면, Long을 사용하면 값이 없을 경우 null로 초기화되므로 만약 값이 0이면 id가 0으로 저장된 것이라고 알 수 있습니다.
2. int, Integer보다 더 넓은 범위의 값을 제공한다.
정수형 타입 | 데이터의 표현 범위 |
int | -2,147,483,648 ~ 2,147,483,647 |
long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
이는 대규모 데이터를 처리하거나 시간이 지남에 따라 증가할 수 있는 경우에 중요합니다.
답변
"int나 long이 아닌 래퍼 클래스 Long을 사용하는 이유는 크게 두 가지입니다.
첫 번째는 원시타입과는 달리 null을 사용할 수 있어 값이 없을 경우 null로 초기화됩니다. 해당 원시타입의 경우 기본값이 0이므로 만약 id가 없을 때는 데이터만 보고 판별하는데 어려움이 있습니다.
두 번째로는 int나 Integer보다 월등히 더 넓은 범위의 값을 제공합니다. 이는 대규모 데이터를 처리하거나 시간이 지남에 따라 증가할 수 있는 경우를 대비하기에 더 나은 선택지입니다."
'Project > 시네마그램' 카테고리의 다른 글
MyBatis와 JPA의 차이, JPA를 선택한 이유는 (0) | 2023.03.28 |
---|---|
JPA와 Spring data JPA 차이점 (+ Hibernate) (0) | 2023.03.27 |
[Error] Docker 컨테이너 연결시 : Communications link failure (0) | 2023.03.22 |
[Docker] docker mysql 포트 충돌 에러 (feat. 3306) (0) | 2023.03.09 |
[Cinemagram] 공통기능은 묶어보자 AOP, 마지막 확인 - (16) (0) | 2023.02.13 |