개발 공부
Java의 int와 Integer, 무엇이 다를까?
Primitive type과 Reference type의 차이를 이해해 봅니다.


똑같은 정수 아닌가요?
Spring boot로 개발을 하던 중 분명 같은 정수를 표현하는데 자바에는 int도 있고 Integer도 있다는 사실을 알게 되었습니다. 둘 다 그냥 정수인 것 같은데 무슨 차이가 있는 것일까요?
Primitive type과 Reference type
Java에서는 자료형이 크게 Primitive type와 Reference type이라고도 불리는 Non-primitive type로 나누어집니다.
W3Schools에 따르면 위 두 자료형의 차이점은 다음과 같습니다.
Primitive type은 Java에서 미리 정의된 자료형이지만 Reference type은 Java에 의해 정의되지 않고 프로그래머에 의해 생성된다. (String 제외)
Reference type은 Primitive type와 달리 메소드를 호출하여 특정 작업을 수행할 수 있다.
Primitive type은 언제나 값을 가지지만 Reference type는
null
값을 가질 수 있다.Primitive type은 소문자로 시작하고 Reference type은 대문자로 시작한다.
Primitive type의 크기는 자료형에 따라 달라지지만 Reference type은 모두 다 같은 크기를 갖는다.
그렇다면 우선 네번째 특징에 의해 호기심이 하나 풀렸습니다. int는 Primitive type이어서 소문자로 시작했고 Integer는 Reference type이어서 대문자로 시작했군요!

언제 무엇을 쓰는 것이 좋을까요?
언제 int(Primitive type)를 쓰면 좋을 지, 언제 Integer(Reference type)를 쓰면 좋을 지 판단하기 위해서는 각각의 자료형의 특징을 살펴보는 것이 도움이 될 듯 합니다.
먼저, int는 4bytes의 크기를 가지는 반면 Integer는 16bytes의 크기를 갖습니다. 하지만 두 개의 표현 범위는 동일하기 때문에 만약 오랫동안 정적인 값을 갖는 정수를 저장한다면 int를 사용하는 것이 적절해보입니다.
하지만 표현 범위가 동일한데 Integer의 크기가 괜히 int보다 큰 것은 아닐 것입니다. 이는 바로 Integer가 정수를 표현하는 것과 함께 위의 두 자료형의 차이점 중 두번째 특징에서 찾아볼 수 있듯 메소드를 포함하고 있기 때문이기도 한데요. Integer를 사용한다면 compare나 toString 등 Integer가 가지고 있는 다양한 메소드들을 상황에 맞게 적절하게 활용할 수도 있을 것입니다.
마지막으로 위의 세번째 특징을 살펴보면 알 수 있듯 Integer는 null
값을 가질 수가 있습니다. 따라서 DB와 연계된 작업을 할 때 Integer를 활용한다면 더욱 유연한 작업이 가능할 것입니다.
이외에도 각각의 특징을 파악하여 개발하고자 하는 상황에 맞게 융통적으로 활용한다면 큰 도움이 되지 않을까 싶습니다!