Auto boxing/unboxing
우리는 자바에서 Integer 타입의 변수를 마치 int처럼 사용할 수 있는데, 이는 auto boxing/unboxing 덕분입니다. Auto boxing과 unboxing은 wrapper class를 사용할 때만 일어납니다.
Primitive type만 사용한다면 auto boxing/unboxing이 일어나지 않으므로 성능이 약간 더 좋습니다. 물론 Entity에서 primitive type을 사용한다 해도, 다른 곳에서 wrapper class를 사용하면 boxing/unboxing이 발생할 수 있습니다.
그에 비해 Wrapper class는 auto boxing/unboxing이 발생할 수 있으므로 성능상 약간 느릴 수 있습니다.
Nullable
null은 “값이 없다”의 의미로 사용될 수 있습니다. 만약 null을 사용할 수 없다면 int의 경우에는 값이 없는 상황을 0이나 -1정도로 표현해야합니다. 0이나 -1이 의미있는 값인 경우에는 문제가 될 수 있겠죠.
Integer와 같은 wrapper class는 reference 타입이므로, null이 될 수 있습니다.
하지만 primitive type은 null이 될 수 없습니다. 그래서 not null인 column이면 primitive type으로 표현할 수 있습니다. 물론 wrapper class를 사용할 때도 @NotNull을 사용해서 not null임을 검증하도록 할 수 있습니다.
1
2
Integer i = null; // 가능
int i = null; // 불가능
PK를 지정할 때는 wrapper class를 사용하는 게 좋습니다. PK가 아직 할당되지 않았다는 뜻으로 null을 사용할 수 있기 때문입니다.
결론
Primitive type은 auto boxing/unboxing이 발생하지 않아 성능이 약간 더 좋고, not null을 확실하게 표현할 수 있습니다.
Wrapper class는 null을 사용할 수 있고, 필요하다면 @NotNull을 통해 not null임을 나타낼 수 있습니다.
상황에 맞게 선택해서 사용하면 될 것 같습니다.