개발을 하다보면 Entity에서 필드를 만들 때 원시타입인 long 대신 래퍼클래스인 Long을 사용하는 걸 많이 봤을 것이다.
왜 long를 안쓰고 Long를 쓸까?
이 둘의 차이점은 무엇일까? 궁금해졌다.
바로 알아보자.
▶원시타입(Primitive type)과 래퍼클래스(Wrapper Class)란?
일단 원시타입은 뭐고 래퍼클래스는 뭘까?
이 사진을 보면 이해가 될 것이다.
기본자료형이 원시타입이고, 래퍼클래스는 원시타입을 객체화 한 것이다.
원시타입(기본자료형)은 언제나 값이 존재한다.
필드에서 초기화하면 디폴트 값으로 0에 준하는 값이 들어가며, 메소드나 클래스 내에서는 초기화 및 선언을 같이 해줘야 실행이 된다. (초기화만하면 에러 발생)
래퍼클래스는 값이 존재하지 않는 "NULL" 상태일 수 있다.
이것이 둘의 차이점이다.
▶Entity에서 원시타입과 래퍼클래스를 사용하는 기준
좋다. 이 둘이 무엇인지 어떤 차이가 있는지도 알았다!
위에서 말했듯이
원시타입(기본자료형)은 언제나 값이 존재한다.
필드에서 초기화하면 디폴트 값으로 0에 준하는 값이 들어가며, 메소드나 클래스 내에서는 초기화 및 선언을 같이 해줘야 실행이 된다. (초기화만하면 에러 발생)
즉, 언제나 값이 존재하고 절대로 Null이 발생할 수 없다.
->NullPointerException이 생기지 않음.
하지만 "없는상태" 와 "0"을 구분할 수가 없다.
예를들어, id를 원시타입으로 두었을 때, 조회 시 0이 나오면 이 값이 진짜 0인지 아니면 null을 의미하는건지 알 수가 없다.
"없는상태" Null이라는 응답을 확실하게 받기 위해서 래퍼타입을 사용하는 것이다.
만약 Entity를 생성했을 때, DB 테이블에 기본값으로 null이 들어가길 원한다
-> 래퍼타입으로 선언
그게 아닌 int처럼 0이 들어가게 하고 싶다
-> 원시타입으로 선언
이런것도 고려해서 DB를 설계해보면 좋을 것 같다는 생각이 들었다.