spring
[Spring] 엔티티의 Id값을 Long 타입으로 지정하는 이유
허몽구
2023. 10. 1. 11:39
문득 Entity 설계를 하다가, 왜 항상 id는 Long으로 설정할까? 라는 의문이 생겼다.
첫 프로젝트에서는 int로 설계 했던 기억이 있는데, 엔티티 관련 설계를 찾아보면 id를 Long으로 설정하는게 99%여서 나도 Long으로 설계하게 되었다...
그때는 마냥 Long이 int보다 범위가 넓으니까 그렇겠지! 라고 생각하고 넘어갔는데,
지금 생각해보니 int도 21억까지 설정이 가능한데... 개인 프로젝트에서 id값이 21억이 넘어갈 수가 있을까? 라는 궁금증이 생겨 한 번 찾아봤다!
엔티티의 ID 값을 Long으로 설정하는 이유
1. 숫자 범위
위에 언급했던 것처럼 int는 -21억 ~ 21억까지 저장이 가능하다.
int | 4 바이트 (32비트) | - 231 ~ (231 - 1) |
- 2,147,483,648 ~ 2,147,483,647 | ||
Long | 8 바이트 (64 비트) | - 263 ~ (263 - 1) |
- 9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8087 |
2. NULL을 사용하기 위해
int나 long 의 경우, 원시타입으로 null값을 가질 수 없다.
반면 Long은 Wrapper type으로, 값이 없을 경우 null로 초기화가 가능하다.
따라서 값이 0이라면, id가 0으로 저장됐음을 파악할 수 있다.
즉, id가 없어서 0으로 세팅이 된 건지, 실제 값이 0인지 데이터를 보고 판별할 수 있다는 것이다.
찾아보니 인프런에도 누가 동일한 주제로 질문한 내용이 있었다!
참고하면 좋을 것 같다.
다른 분들이 Entity의 id를 Long 타입으로 설정하길래 아무 생각 없이 따라 썼는데, 이유를 알고 나니 왜 그렇게 작성해야 하는지 알게 되어 좋았다!