본문으로 건너뛰기

Entity에서 PK ID

엔티티
ex) EmployeeEntity.java or Employee.java 를 만드는데

pk로 사용 되는 id 를 어떻게 만들지 고민이 되서 찾아봤다.

Long 으로 할지 long으로 할지
Integer 로 할지 int로 할지 말이다.

일단 비슷한 궁금증으로 질문을 한 사람이 있었다.

백 선생님의 답변은

좋은 질문입니다. null을 사용할 수 있기 때문에 사용하고 있습니다.
프리미티브 타입은 기본값이 0인데 그럼 실제로 id 값이 0인건지, 값이 없는건지 사실 구분하기 어렵습니다.
id가 0일 수도 있는거니까요.
그런데 Wrapper 타입인 Long이나 Integer를 쓰면 id가 없는 경우엔 확실히 null이고, 그 자체로 id가 없다는걸 보장할 수 있죠.


Point1

  • int 나 long은 프리미티브 타입 이기때문에 기본값이 0이 되고 렙퍼형인 Integer 이나 Long 은 오브젝트 이므로 null 대입이 가능하다.

비슷한 생각으로 포스팅한 어떤분은 밑에와 같이 간략하게 코드를 넣어주셨다.
https://siyoon210.tistory.com/139

Null을 담을 수 있는가?

int i = null;//불가능
Integer integer = null; //가능

제네릭 타입에서 사용 할 수 있는가?

List<int> i;//불가능
List<Integer> integer;//가능

int / float - 32bits long / double - 64bits

Integer / Float - 128bits Long / Double 196bits

이러 하다고 한다.
기하급수적으로 많아지거나 하면 확실히 차이가 많이 벌어진다. 성능 부분에서 고려해보고 조사 하신분
https://yjacket.tistory.com/63


Point2

  • 속도나 메모리 사용면에서는 프리미티브 타입이 우수하다.

일단 여기까지의 결론으로써

나는 리퍼런스 타입(뤱핑객체)을 사용하기로 결정.
(null 입력 / 제네릭 및 컬렉션에서의 활용을 위해)


이제 마지막이다

Integer Vs Long

Integer:             -2,147,483,648  to  2,147,483,647
Long: -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807

각각의 차이(숫치의 허용범위) 는 이러하다고 한다.

pk id 가 만약 1억5천 정도의 범위수준에서 벗어나지 않거나
혹은, 개발 초기부터 범위가 분명 할 경우에는 Integer를 사용.

pk id 가 1억5천 수준을 넘어가거나
혹은, 개발 초기부터 범위가 불분명 할 경우에는 Long를 사용.

하라는 스택오버플로어 형님들의 답변이 있었다.

https://stackoverflow.com/questions/17398192/long-versus-integer-for-the-id-field-of-java-entities

추가 결론

범위가 불문명한데 pk id 가 기하급수적으로 발생할 것 같은 테이블 같은경우는 Long을 사용
범위가 확실하거나 pk id 가 적게 발생할 것 같은 테이블은 Integer를 사용하기로 결정.


최후의 결론

Integer 혹은 Long을 사용하되 1억5천을 기준으 더 크게 갈것인지 아닌지를 고려하고 그것이 확실한지 불문명 한지 에 따라서 결정한다.
확실하다. 적다. 1억5천이하로 발생한다 -> Integer
불분명 하다. 어쨌든 클것같다. 1억5천 이상으로도 발생할 여지가 있다 -> Long