Java 에서 Primitive vs. Wrapper Class 와 Boxing, Unboxing, Auto-boxing, Auto-unboxing

2SEONGA·2025년 1월 21일
0

Java

목록 보기
4/13

기본형(Primitive) vs. 래퍼 클래스(Wrapper Class)

1. 기본형 (Primitive Type)

가장 단순하고 효율적인 데이터 타입으로, 메모리 공간을 최소화하며 값 자체를 저장
[Java에서 제공하는 8가지 기본형]

데이터 타입크기(비트)기본값(default)예시
byte80-128 ~ 127
short160-32,768 ~ 32,767
int320-2³¹ ~ 2³¹-1
long640L-2⁶³ ~ 2⁶³-1
float320.0f소수점 7자리
double640.0d소수점 15자리
char16'\u0000'문자 하나 ('A', '0')
boolean1falsetrue / false

기본형 (Primitive Type) 특징

  • 값 자체를 저장, 빠른 연산 속도
  • 참조 타입이 아닌 값 타입으로, null 불가능
  • 높은 메모리 효율성

2. 래퍼 클래스 (Wrapper Class)

기본형 데이터를 객체(object)로 다룰 수 있도록 감싸주는 클래스
[Java에서 제공하는 각각의 기본형에 대해 대응되는 래퍼 클래스]

기본형래퍼 클래스
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

래퍼 클래스 (Wrapper Class) 특징

  • 객체이므로, Java 컬렉션 프레임워크(예: ArrayList, HashMap)에서 사용 가능
  • 참조 타입이므로 null 가능
  • 클래스에서 제공하는 메서드를 활용하여 변환, 연산 등의 작업 수행
    • ex ) Integer.parseInt("123") (문자열을 정수로 변환)
  • 기본형보다 메모리 사용량이 많고 느린 연산 속도

3. 주요 차이점

특성기본형래퍼 클래스
저장 방식값 자체 저장객체로 값을 감싸서 저장
메모리 사용더 적음더 많음
연산 속도더 빠름더 느림
null 허용 여부불가능가능
메서드 제공없음값 변환, 비교 등의 메서드 제공
컬렉션 사용 가능 여부불가능가능

Java Boxing, Unboxing, 그리고 Auto-boxing, Auto-unboxing

기본 데이터 타입(primitive type)과 그에 대응되는 래퍼 클래스(wrapper class) 간의 변환을 설명하는 개념


1. Boxing

기본 데이터 타입에 대응하는 래퍼 클래스의 객체로 변환하는 과정

  • 예시:
    intInteger로 변환
  • 필요성:
    Java 컬렉션 클래스(ArrayList, HashMap 등)와 같은 곳에서는 객체만 저장할 수 있으므로, 기본 데이터 타입을 객체로 변환해야 할 때 사용
int primitiveValue = 10;
Integer boxedValue = Integer.valueOf(primitiveValue); // 명시적 Boxing

2. Unboxing

래퍼 클래스 객체를 다시 기본 데이터 타입으로 변환하는 과정

  • 예시:
    Integerint로 변환
  • 필요성:
    객체로 저장된 데이터를 다시 연산하거나 기본 데이터 타입으로 사용해야 할 때 사용
Integer wrapperValue = Integer.valueOf(10);
int unboxedValue = wrapperValue.intValue(); // 명시적 Unboxing

3. Auto-boxing

Java 5부터 도입된 기능으로, 기본 데이터 타입을 래퍼 클래스 객체로 자동 변환

  • 특징:
    명시적으로 Integer.valueOf() 등을 호출하지 않아도 컴파일러가 자동으로 처리
int primitiveValue = 10;
Integer autoBoxedValue = primitiveValue; // 컴파일러가 Integer.valueOf() 자동 호출

4. Auto-unboxing

Java 5부터 도입된 기능으로, 래퍼 클래스 객체를 기본 데이터 타입으로 자동 변환

  • 특징:
    명시적으로 intValue() 등을 호출하지 않아도 컴파일러가 자동으로 처리합
Integer wrapperValue = 20;
int autoUnboxedValue = wrapperValue; // 컴파일러가 wrapperValue.intValue() 자동 호출

주의할 점

  • NullPointerException
    Auto-unboxing 시 객체가 null이면 NullPointerException이 발생
    = int는 null이 될 수 없기 때문
    Integer wrapperValue = null;
    int num = wrapperValue; // NullPointerException 발생

5. 정리

개념정의예시
Boxing기본 타입 → 래퍼 클래스 객체 변환Integer.valueOf(primitiveValue)
Unboxing래퍼 클래스 객체 → 기본 타입 변환wrapperValue.intValue()
Auto-boxing기본 타입 → 객체 변환을 컴파일러가 자동 처리Integer obj = 10;
Auto-unboxing객체 → 기본 타입 변환을 컴파일러가 자동 처리int num = wrapperValue;

profile
(와.. 정말 Chill하다..)

0개의 댓글