JPA Entity클래스에서 id를 int가 아닌 Long 타입으로 하는 이유

2023. 3. 27. 15:18Project/시네마그램

현재 면접 스터디를 진행 중에 있습니다.

개인 프로젝트 관련해서 받았던 질문들 중 대답을 잘하지 못했던 부분들은 따로 정리하고자 합니다.

 

 

 

질문

코드를 봤는데, 개인 프로젝트에서 엔티티 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보다 월등히 더 넓은 범위의 값을 제공합니다. 이는 대규모 데이터를 처리하거나 시간이 지남에 따라 증가할 수 있는 경우를 대비하기에 더 나은 선택지입니다."