Java int vs Integer 차이

코드 리뷰 중에 java int vs Interger 차이에 대한 이야기와 그래서 어떤 타입을 사용 하는게 좋을지에 대한 논의가 있었다.

Java int 와 Integer 의 차이는 결론부터 말하면 아래와 같다.

public class Example {
    private int count1; //  기본값은 0 즉 zero
    private Integer count2; // 기본값은 null, 값이 할당 되어야 함
}

int count 에는 값을 할당 하지 않아도 count 필드와 함께 value 로 0이 반환이 되는 반면, Integer count 의 경우 값을 할당 하지 않으면 필드 자체가 없는 상태로 응답이 된다. 즉 nullable 한 필드로 변한다는 의미이다.

  1. 기본 타입 vs 참조 타입
    • int 는 기본 자료형이고, 값을 직접 저장하는 구조이다.
    • Integer는 객체 타입이고, int 값에 대한 참조를 가지고 있다
  2. null 값 할당 가능 여부
    • int는 기본 타입으로 null 을 할당 할 수 없으며, 기본값으로 0이 할당 되어있는 구조이다.
    • Integer는 null의 값을 가질 수 있는 타입이다.
    • 이러한 이유로 response 타입을 지정할때 int 로 지정을 하게 되면 값이 null 이거나 할당을 안해주어도 0 으로 응답이 되고, Integer는 필드 자체가 없어지는 구조로 응답이 이루어 진다.

Primitive Type(int) vs Reference Type(Integer) 상세 설명

좀 더 나아가서 근본적인 비교를 위해 메모리에 저장되는 구조에 대한 이야기가 필요하다.

  • primitive type인 int는 기본 자료형으로 값 자체를 직접 저장 하는 구조이고 메모리 상에 고정된 크기로 저장이 되며, 스택(Stack) 메모리에 값을 직접 저장을 한다.
  • reference type인 Integer 는 Wrapper class(클래스로 한번 더 감싼)로 힙(Heap)메모리에 객체를 저장하고, 스택에는 객체에 대한 참조(주소)가 저장이 되는 구조이다. 그러므로 null 값도 가질 수 있게 되는 것이다.
  • Wrapper class 로 Reference type 인 Integer는 다른 객체들과 비슷하게 내부에 함수를 위치 시킬 수 있어 객체에 대한 함수 호출이 가능하기에 로직을 구성 할 때 어느정도 유연한 편이라 볼 수 있다.

이번 글(java int vs Integer)을 작성하며 깨닫게 된 점

실무에서 클라이언트 개발자와 Response 에 대한 논의가 없었다면, 무심코 Integer에 대한 함수 호출을 할 수 있냐 없냐 null 값을 가질 수 있냐 없냐 등에 대한 이해만 있었을 것 같은데, Type 지정이 곧 필드 자체의 존립을 결정하여 이러한 결정이 클라이언트 개발자의 개발 편의성과 직결 된다는 사실을 깨닫게 되었다.

java int vs Integer 와 같이 java boolean vs Boolean 도 비슷한 맥락이라는 것도 알게 되어 java 프로그램을 작성 하는데 있어 한층 더 깊은 이해가 생긴 실무 사례이기도 하다.

Leave a Comment