[TIL] Entity 설계 시 ID값은 왜 Long일까?

토이 프로젝트를 하다가, JPA Entity 설계 시 ID값은 왜 Long으로 했나요??

라는 질문에 나는 답을 할 수 없었다….

왜냐하면 JPA Entity 설계시 관련 강의나 책에서 Long으로 지정하고 있어서

나는 그냥 따라서 기계적으로 만들었던거였다. ( 그땐 왜 안궁금했지? )

왜? Entity 설계시 ID 값을 Long으로 지정하는지?

이유를 찾아봤다.


int, long이 아닌 Wrapper Class(Long)를 쓰는 이유

int, long이 아닌 Wrapper Class(Long)를 쓰는 이유는 null을 사용할 수 있기 떄문이다.

primitive type(기본형 타입)은 기본값이 0이 되는데,

id가 없을 때를 나타낼 수 없다.

Long과 Integer 중에서 Long을 쓰는 이유는 표현범위 때문이다.

Long이 Integer보다 월등히 많은 수를 표현할 수 있기 때문에 Long을 사용한다.

Integer의 범위로도 충분하다면 Integer를 사용해도 무방하다.

최종 정리

1) int가 아닌 이유

long이 더 많은 값을 저장할 수 있다.

2) long 대신 Long 쓰는 이유

long은 primitive type으로, 값이 없을 경우 0으로 초기화된다.

따라서, id가 없어서 0으로 세팅이 된 것인지, 아니면 실제 값이 0인지 데이터만 보고 판별할 수 없다.

반면 Long은 wrapper type으로, 값이 없을 경우 null로 초기화 된다.

따라서 값이 0이라면, id가 0으로 저장됐음을 알 수 았다.