[Java] Primitive Type vs Wrapper Class

구본탁·2025년 4월 10일
1

Java

목록 보기
2/2
post-thumbnail

🤔 Primitive Type??

Java의 코드를 보시면 변수나 메서드가 정의될 때, int, boolean, char 등의 타입이 작성된 것을 볼 수 있습니다. 자바에서 사용되는 기본적인 타입이고 값 자체를 저장하며 객체가 아닙니다.


📎원시 타입(primitive type)의 종류

Java에서 원시 타입은 아래와 같은 8가지의 타입으로 구성됩니다.


🚩 원시 타입(primitive type)의 특징

  • 원시 타입은 값 자체를 저장하며, 보다 빠른 연산이 가능합니다.
  • 기본값이 존재하며 null 값은 가질 수 없습니다.
    선언 시 아무값도 초기화하지 않으면, 컴파일러가 해당 타입의 기본값을 자동으로 설정합니다.
    but, 기본값은 클래스 필드에만 적용되며, 지역 변수는 반드시 초기화하여 사용해야 합니다.

🤔 Wrapper Class??

Java의 타입은 기본형 타입과 참조형 타입으로 나눌 수 있습니다. 기본형 타입은 원시 타입과 동일한 개념이지만, 참조형 타입은 모두 Wrapper Class라고 할 수 없습니다. Wrapper Class는 참조형 타입에 속하지만, 원시 타입을 객체로 감싸서 객체 지향적인 기능을 추가한 특수한 참조형 타입입니다.


📎 Wrapper Class의 종류

Wrapper Class는 원시 타입에 대응하는 8개의 클래스가 있습니다.


🏗️ Wrapper Class 내부 구조

Integer 클래스를 예시로 내부 구조를 살펴보겠습니다.

  1. 멤버 변수
    final 키워드로 선언된 실제 데이터가 담겨있습니다.
private final int value; // 감싸고 있는 기본형 데이터
  1. 생성자
    생성 시 원시 타입 값을 받아 객체를 초기화합니다.
public Integer(int value) {
    this.value = value;
}
  1. 유틸리티 메서드
    값 비교, 변환, 문자열 처리 등의 메서드를 포함합니다.
public static Integer valueOf(int i) {
    return new Integer(i); // Autoboxing 지원 메서드
}

public int intValue() {
    return value; // Unboxing 메서드
}

public static int parseInt(String s) throws NumberFormatException {
    return Integer.parseInt(s); // 문자열 → int 변환
}

public int compareTo(Integer anotherInteger) {
    return Integer.compare(this.value, anotherInteger.value); // 값 비교
}
  1. 상수 필드
    데이터 타입의 최대값과 최소값을 제공합니다.
public static final int MAX_VALUE = 2147483647; // int의 최대값
public static final int MIN_VALUE = -2147483648; // int의 최소값

📦 Boxing & Unboxing

Boxing은 원시 타입을 Wrapper Class로 변환하는 것이고,
Unboxing은 Wrapper Class를 원시 타입으로 변환하는 것입니다.

명시적 변환과 내부적 변환으로 나눌 수 있는데, 내부적 변환은 컴파일러가 내부적으로 처리해주는 것을 의미합니다.

// Boxing (명시적)
int primitiveValue = 10;
Integer boxedValue = Integer.valueOf(primitiveValue);

// Unboxing (명시적)
Integer wrapperValue = Integer.valueOf(20);
int unboxedValue = wrapperValue.intValue();

// Auto-boxing (내부적)
Integer autoBoxedValue = primitiveValue;

// Auto-unboxing (내부적)
int autoUnboxedValue = wrapperValue;

⚔️ Primitive Type vs Wrapper Class

구분Primitive TypeWrapper Class
NullNull 불가Null 허용
메모리JVM stack에 저장, 비교적 빠름JVM heap에 저장, 비교적 느림
변경값을 그대로 저장하고 변경 가능값을 변경하려면 새 인스터스의 주소값을 참조하여 변경

🌱 마지막 한마디

데이터베이스 설계에 따라, 객체 지향적 기능에 따라 사용할 표현 방식을 항상 고려하며 작업하자

profile
성공의 반대는 실패가 아니라 포기다

0개의 댓글