Primitive Type과 Reference Type

2025. 9. 30. 17:24·JAVA

1. Java 데이터 타입의 분류

Java의 데이터 타입은 저장 방식과 메모리 모델에 따라 Primitive Type과 Reference Type으로 분류된다.

 

1.1. Primitive Type (기본형 타입)

  • 정의: 데이터의 실제 값(Value)을 변수 내에 직접 저장하는 타입.
  • 특징:
    • 메모리의 스택(Stack) 영역에 값이 할당된다.
    • null 값을 허용하지 않으며, 선언 시 각 타입의 기본값(e.g., int는 0, boolean은 false)으로 초기화된다.
    • 접근 속도가 빠르다.
  • 종류: Java에는 총 8개의 Primitive Type이 사전에 정의되어 있다.
타입 크기 기본값 설명
boolean 1 bit false 참 또는 거짓
byte 1 byte 0 바이트 단위 정수
char 2 bytes \u0000 문자
short 2 bytes 0 단정밀도 정수
int 4 bytes 0 정수
long 8 bytes 0L 장정밀도 정수
float 4 bytes 0.0f 단정밀도 실수
double 8 bytes 0.0d 배정밀도 실수

 

 

1.2. Reference Type (참조형 타입)

  • 정의: 객체(Object)의 실제 데이터가 저장된 힙(Heap) 메모리 영역의 주소(Reference)를 저장하는 타입.
  • 특징:
    • 변수는 스택(Stack) 영역에, 실제 객체는 힙(Heap) 영역에 할당된다.
    • null 값을 허용하며, 이는 변수가 어떠한 객체도 참조하고 있지 않음을 의미한다.
    • 기본형을 제외한 모든 클래스, 인터페이스, 배열, 열거형(Enum)이 이에 해당한다.

 

2. Wrapper Class

Wrapper Class는 Primitive Type을 객체로 다루기 위해 사용하는 특수한 목적의 Reference Type이다.

 

2.1. 정의

8개의 Primitive Type 각각에 1:1로 대응하여, 해당 값을 객체 형태로 감싸는(Wrap) 클래스. int에 대응하는 Integer, char에 대응하는 Integer, Character 등이 있다.

 

2.2. 주요 목적

  • 제네릭(Generic) 타입 활용: 컬렉션 프레임워크(ArrayList<T>, HashMap<K, V>) 등 제네릭 타입 파라미터에는 Reference Type만 지정할 수 있다. ArrayList<Integer>와 같이 Primitive Type을 객체 컨텍스트에서 사용하기 위해 Wrapper Class가 필수적이다.
  • null 값 표현: Primitive Type은 null을 표현할 수 없으나, Wrapper Class는 null 참조를 통해 '값이 존재하지 않음' 상태를 명시적으로 나타낼 수 있다. 이는 데이터베이스 연동 시 유용하게 사용된다.

 

2.3. Autoboxing 및 Unboxing

  • Autoboxing: Primitive Type 값을 해당하는 Wrapper Class 객체로 자동 변환하는 기능. (int → Integer)
  • Unboxing: Wrapper Class 객체에서 Primitive Type 값을 자동으로 추출하는 기능. (Integer → int)
// Autoboxing: 컴파일러가 Integer.valueOf(100)으로 처리
Integer integerObj = 100;

// Unboxing: 컴파일러가 integerObj.intValue()로 처리
int intValue = integerObj;

 

 

3. 타입 관계 및 변환 규칙 요약

비교 항목 Primitive vs. Reference Primitive vs. Wrapper
비교 관점 데이터 저장 방식 (값 vs. 주소) 및 메모리 구조 실용적 목적 (순수 연산 vs. 객체 기능 활용)
관계 Java 데이터 타입의 최상위 분류 Primitive Type과 그에 대응하는 특정 Reference Type의 관계
형변환 int → double과 같이 확대 변환(Widening) 규칙을 따름 Integer와 Double은 상속 관계가 없어 직접 변환이 불가.

Integer 객체를 Double 타입으로 변환해야 할 경우, integer.doubleValue() 메서드를 사용하거나 (double)integer와 같이 Unboxing을 유도한 후 캐스팅해야 한다. 이는 객체의 형변환이 상속 계층 구조를 따르기 때문이며, Integer와 Double은 상속 관계에 있지 않기 때문에 형변환이 불가능하다.

'JAVA' 카테고리의 다른 글

Serializable  (0) 2025.12.04
about JVM  (0) 2025.09.30
JDK, JRE, JVM  (0) 2025.09.30
자바의 hashCode(), hash()에 대하여  (0) 2025.03.10
'JAVA' 카테고리의 다른 글
  • Serializable
  • about JVM
  • JDK, JRE, JVM
  • 자바의 hashCode(), hash()에 대하여
이경빈
이경빈
이 블로그의 게시글을 바탕으로 학습하는 것을 권장하지 않습니다. 이 블로그의 게시글을 통해 무엇을 학습할 수 있고 무엇을 학습해야 하는지 알 수 있는 이정표 및 목차가 되었으면 합니다.
  • 이경빈
    메모용 블로그
    이경빈
    • 분류 전체보기 (44)
      • 기본개념 (0)
      • Git (2)
      • OOP (객체 지향 프로그래밍) (1)
      • CS (2)
      • JAVA (7)
        • 문법 (0)
        • stream api (1)
        • 자료구조 (1)
      • Spring (11)
        • Spring Context (1)
        • Spring beans (1)
        • Spring MVC (0)
        • RestTemplate (1)
        • JPA (1)
        • Mockito (1)
        • Spring Security (4)
        • Async (1)
      • Gradle (0)
      • 컴퓨터 네트워크 (6)
      • DBMS (2)
        • SQL (2)
      • 자료구조 (1)
      • 위클리페이퍼 (5)
      • AWS (0)
      • 프로젝트 (3)
        • 트러블슈팅 (1)
        • 회고 (2)
        • git hub 프로젝트 (0)
        • git in java (0)
      • 운영체제 (1)
      • Project (0)
        • 고민거리들 (0)
        • ai에게 요구한 수정사항 (0)
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
이경빈
Primitive Type과 Reference Type
상단으로

티스토리툴바