Java

래퍼 클래스

cinnamonbrown 2026. 3. 20. 18:09

래퍼 클래스

래퍼 클래스는 자바에서 기본형(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==bfalse인 이유는 두 객체의 주소값이 다르기 때문입니다.

반면 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