래퍼 클래스
래퍼 클래스는 자바에서 기본형(int, long 등)을 객체처럼 다루기 위해 등장한 개념입니다.
이번 글에서는 이 래퍼 클래스에 대해 정리해보고자 합니다.
📌 래퍼 클래스(Wrapper Class)란?
기본형을 객체로 다루기 위한 클래스입니다
예
- int ⇨ Integer
- long ⇨ Long
- double ⇨ Double
- boolean ⇨ Boolean
🔎 왜 필요할까?
- 기본형은 객체처럼 메서드를 사용 ❌
- 컬렉션 (List, Map 등)에 기본형을 직접 넣을 수 ❌
- null 값을 표현할 수 ❌
📌 기본형 vs 참조형 변수
일단, wrapper에 대해 더 구체적으로 정리하기에 앞서 선행 지식인 기본형 변수와 참조형 변수에 대해서 먼저 다뤄보겠습니다
기본형 변수와 참조형 변수의 차이는 무엇인가?
기본형 변수는 값 자체를 저장합니다.참조형 변수는 변수의 주소값(참조값)을 저장합니다.
📌 박싱(Boxing) VS 언박싱(Unboxing)
박싱(Boxing)과 언박싱(Unboxing)은 기본형과 래퍼 클래스 간의 변환 과정입니다.
- 박싱 :
기본형➡래퍼 클래스 - 언박싱 :
래퍼 클래스➡기본형
이러한 변환을 통해 기본형 데이터를 객체처럼 다룰 수 있습니다.
✅ valueOf() 메서드
이 메서드는 기본형 값을 래퍼 객체로 변환합니다.
또 이는 새로운 객체를 생성하는 것이 아니라 내부적으로 객체를 재사용 할 수 있다는 특징이 있습니다.
✅ intValue() 메서드
intValue()는 래퍼 객체의 값을 기본형으로 변환합니다.
또한 intValue()뿐만 아니라 다양한 타입에 맞는 메서드도 존재합니다.
longValue()doubleValue()floatValue()- `shortValue()`
int a= 10;
Integer b= Integer.valueOf(a); // 박싱
int c= b.intValue(); // 언박싱
📌 오토박싱 / 오토언박싱
또, 자바는 이러한 변환을 자동으로 처리해주는 오토박싱/언박싱(Auto Boxing/Unboxing) 기능도 제공합니다.
즉, 개발자가 명시적으로 valueOf()나 intValue()를 호출하지 않아도 자동으로 변환되게 합니다.
int a=10;
Integer b= a; // 오토박싱
int c= b; // 오토언박싱
📌 문자열 ▶︎ 숫자 변환(parsInt)
문자열 형태의 숫자는 연산을 위해 숫자 타입으로 변환해야 하는데 이때 사용되는 함수가 parseInt()메서드입니다.
예를 들어,
String input= “10”;
int result1= Integer.parseInt(input);
Integer result2= Integer.valueOf(input);
System.out.println(result1);
System.out.println(result2);
실행 결과
10
10
여기서 parseInt()와 valueOf()메서드는 모두 숫자로 변환되지만, 반환 타입에 차이가 있습니다.
✅ parseInt() vs valueOf()
parseInt()▶︎ 기본형 int 반환valueOf()▶︎ 래퍼 클래스 Integer 반환
즉,
- parsInt()는 "숫자값" 자체를 얻고 싶을 때 사용
- valueOf()는 "객체 형태"가 필요할 때 사용
📌 래퍼클래스 비교
래퍼 클래스는 객체이기 때문에 == 연산자 대신 **equals()** 메서드를 이용합니다.
==: 참조값 비교(주소 비교)equals(): 실제 값 비교
Integer a= 1000;
Integer b= 1000;
System.out.println(“a==b 의 결과 : “ + (a==b));
System.out.println(“a.equals(b) 의 결과 : “ + a.equals(b));
실행 결과
a==b 의 결과 : false
a.equals 의 결과 : true
▶︎ a==b가 false인 이유는 두 객체의 주소값이 다르기 때문입니다.
반면 equals()는 내부 값을 비교하기 때문에 true가 반환됩니다.
⚠️ 주의 : Integer 캐싱
Integer는 -128 ~ 127 범위의 값에 대해 캐싱을 사용합니다.
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true
이 범위에서는 같은 객체를 재사용하기 때문에 == 결과가 true입니다.
하지만, 범위를 벗어나면 새로운 객체가 생성되어 주소값이 달라져 false가 나오게 됩니다.
'Java' 카테고리의 다른 글
| Java에서 String 비교 (0) | 2026.03.16 |
|---|---|
| Java- 불변객체 (0) | 2026.03.11 |
| Object- toString() (0) | 2026.03.03 |
| instanceof (0) | 2026.02.27 |