Journey to CS/프로그래밍 언어

[Java] 래퍼 클래스(Wrapper Class)와 오토 박싱

Cordilog 2026. 1. 22. 16:18

자바는 객체 지향 언어지만 성능을 위해 비객체형인 기본형(Primitive)을 지원한다.

하지만 제네릭이나 컬렉션 프레임워크처럼 객체만 다룰 수 있는 상황에서는 기본형을 객체로 감싸야 하는데, 이때 사용하는 것이 래퍼 클래스(Wrapper Class) 다.

박싱(Boxing)과 언박싱(Unboxing)

  • Boxing: 기본형 → 래퍼 클래스 (int → Integer)
  • Unboxing: 래퍼 클래스 → 기본형 (Integer → int)

JDK 1.5부터는 컴파일러가 이를 자동으로 처리해주는 Auto-boxing/Auto-unboxing을 지원한다.

덕분에 개발자는 기본형과 래퍼 클래스를 혼용해서 사용할 수 있다.

📌코드 예시 : null 처리와 유틸리티 활용

래퍼 클래스는 null을 담을 수 있어 DB 연동 시 유용하며, 다양한 형변환 메서드를 제공한다.

public class WrapperExample {
    public static void main(String[] args) {
        // 기본형은 null 불가능 -> int id = null; (컴파일 에러)
        
        // 래퍼 클래스는 null 가능 (값이 없음을 표현)
        Integer databaseId = null; 

        // Auto Boxing: int가 자동으로 Integer 리스트에 들어감
        Integer numObj = 100; 
        
        // 유틸리티 기능 활용: 2진수 변환
        String binary = Integer.toBinaryString(numObj);
        System.out.println("100의 2진수: " + binary); // 1100100
        
        // 문자열을 숫자로 파싱
        int port = Integer.parseInt("8080");
    }
}

 

 

  • int id: 스택에 직접 값을 담아야 하므로, 비어있는 상태인 null을 담을 수 없다.
  • Integer databaseId: 힙 영역의 객체를 가리키는 '화살표(참조)'만 가지고 있다. 가리키는 대상이 없으면 null이 된다.

1️⃣구조적 차이: 기본형 vs 래퍼 클래스 (메모리 & Null)

가장 큰 차이는 데이터가 저장되는 방식이다.

int는 값 그 자체를 들고 있지만, Integer는 객체(Object)를 가리키는 주소값을 들고 있다.

 

 

2️⃣ 기능적 흐름: 오토 박싱 & 유틸리티 메서드

코드에서 일어나는 값의 변환과 메서드 호출 과정

 

☑️ 정리

 

  • Null 허용 여부:
    • int: 불가능. (0이라도 넣어야 함)
    • Integer: 가능. (DB에서 값이 없을 때 등을 표현하기 적합)
  • 오토 박싱 (Auto Boxing):
    • 개발자가 new Integer(100)이라고 쓰지 않아도, 컴파일러가 알아서 100을 객체로 감싸준다.
  • 도구 상자 역할 (Helper Methods):
    • Integer 클래스는 단순히 값을 담는 것 외에도, toBinaryString(진수 변환), parseInt(문자열→숫자) 같은 강력한 정적(static) 메서드들을 제공한다.