자바는 객체 지향 언어지만 성능을 위해 비객체형인 기본형(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) 메서드들을 제공한다.
'Journey to CS > 프로그래밍 언어' 카테고리의 다른 글
| [Java] 메서드의 메모리 적재 원리와 클래스 선언 규칙 (0) | 2026.02.27 |
|---|---|
| [Java] static과 인스턴스 - JVM이 main 메서드를 찾아가는 방법 (0) | 2026.02.26 |
| [Java] 기본형(Primitive)과 참조형(Reference)의 메모리 구조 차이 (0) | 2026.01.22 |
| [파이썬] OOP - 캡슐화 개념과 데이터 은닉, getter/setter 이해하기 (0) | 2025.04.10 |
| [파이썬] os 모듈, 언제 어떻게 쓰면 좋을까? (0) | 2025.03.21 |