int와 Integer

2025. 4. 7. 20:34·JAVA

(요약)

  • int: 기본형 타입(Primitive Type). 숫자 값 자체를 저장합니다. 객체가 아닙니다.
  • Integer: 참조형 타입(Reference Type). int 값을 객체로 감싼 래퍼 클래스(Wrapper Class)입니다.

 

특징 (Feature)
int (기본형) Integer (래퍼 클래스/객체)
종류 (Type) Primitive Type (기본형 타입) Class / Object (참조형 타입)
데이터 저장 (Storage) 실제 정수 값 (Value) 객체 참조/주소 (Reference to Object)
메모리 (Memory) 스택(Stack) 영역에 주로 저장 힙(Heap) 영역에 객체 생성
null 허용 (Nullable?) 불가능 (No) 가능 (Yes)
기본값 (Default Value) 0 null
메서드 보유 (Methods?) 없음 (No) 있음 (Yes, e.g., intValue(), parseInt())
제네릭/컬렉션 (Generics/Collections) 사용 불가 (List<int> X) 사용 필수 (List<Integer> O)
성능 (Performance) 산술 연산 시 일반적으로 더 빠름 객체 관련 오버헤드 존재

 


 

주요 차이점 상세 설명

  1. 기본형 vs. 객체:
    • int는 Java가 미리 정의한 8개의 기본 타입 중 하나로, 데이터의 실제 값을 변수 공간에 직접 가집니다. 객체가 아니므로 객체지향의 특징(메서드 호출 등)을 직접 적용할 수 없습니다.
    • Integer는 int 값을 내부에 포함하는 객체입니다. 변수는 이 객체가 실제 저장된 힙 메모리의 주소(참조)를 가집니다. 객체이므로 다양한 메서드를 가지고 있습니다.
  2. Null 값 허용 여부:
    • int는 기본형이므로 null 상태를 가질 수 없습니다. 값이 할당되지 않으면 기본값 0을 가집니다.
    • Integer는 객체이므로 null 참조를 가질 수 있습니다. 이는 "값이 없음" 또는 "아직 설정되지 않음" 상태를 표현해야 할 때 유용합니다 (예: 데이터베이스 조회 결과).
  3. 제네릭 및 컬렉션 프레임워크 사용:
    • Java의 제네릭(<>)과 컬렉션 프레임워크(ArrayList, HashMap 등)는 객체만을 다룰 수 있도록 설계되었습니다. 따라서 int와 같은 기본형은 직접 사용할 수 없습니다.
    • 이 때문에 컬렉션에 정수 값을 저장하려면 Integer 래퍼 클래스를 사용해야 합니다 (ArrayList<Integer>).

 


 

오토박싱 (Auto-boxing) & 오토언박싱 (Auto-unboxing)

Java 5부터 컴파일러가 int와 Integer 사이의 변환을 자동으로 처리해 줍니다.

  • 오토박싱: int -> Integer 자동 변환 (Integer numObj = 10;)
  • 오토언박싱: Integer -> int 자동 변환 (int num = numObj;)

이 기능 때문에 두 타입을 코드 상에서 비슷하게 쓸 수 있지만, 내부적으로는 변환이 일어나며 근본적인 타입 차이는 여전히 존재합니다. 특히 Integer 변수가 null일 때 오토언박싱이 일어나면 NullPointerException이 발생할 수 있으므로 주의해야 합니다.

언제 무엇을 사용할까?

  • int: 단순한 숫자 계산, 배열 인덱스, 루프 카운터 등 성능이 중요하고 null 값이 필요 없으며 객체 기능이 필요 없을 때 주로 사용합니다.
  • Integer: 제네릭이나 컬렉션을 사용해야 할 때, 값이 null일 수 있는 상황을 표현해야 할 때, Integer 클래스가 제공하는 유틸리티 메서드(예: Integer.parseInt())가 필요할 때 사용합니다.

Integer[] -> int[] 오토 언박싱은 불가능하다.

오토박싱/언박싱은 기본형과 그에 해당하는 래퍼 객체 '하나하나' 사이에서 동작하는 기능이지,
배열 타입 전체를 자동으로 변환해주는 기능은 아님

저작자표시 (새창열림)

'JAVA' 카테고리의 다른 글

length 그리고 length(), size()  (0) 2025.04.02
'JAVA' 카테고리의 다른 글
  • length 그리고 length(), size()
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      우선순위 큐
      참조자
      해시
      데드락
      슬라이딩 윈도우
      문자열
      dp
      context switching
      메모리구조
      누적합
      그리디
      역참조
      브루트포스
      dfs
      프로세스
      스레드
      투포인터
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    int와 Integer
    상단으로

    티스토리툴바