정의 : 기본 자료형을 객체로 감싸는 클래스
| 기본 자료형 (Primitive Type) | 래퍼 클래스 (Wrapper Class) |
|---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
| 자료형 | 종류 | 범위 | 바이트 | 비트 |
|---|---|---|---|---|
boolean | 논리형 | true/false | 1 | 8 |
char | 문자형 | 0 ~ 65535 유니코드 값 | 2 | 16 |
byte | 정수형 | -128 ~ 127 | 1 | 8 |
short | 정수형 | -32,768 ~ 32,767 | 2 | 16 |
int | 정수형 | -2,147,483,648 ~ 2,147,483,647 | 4 | 32 |
long | 정수형 | -9,233,372,036,854,775,808 ~9,233,372,036,854,775,807 | 8 | 64 |
float | 실수형 | 약 소수점 6~7자리까지 | 4 | 32 |
double | 실수형 | 약 소수점 15~17자리까지 | 8 | 64 |
- 변수에 객체가 담기면 해당 변수를 참조형 변수라고 말한다
- 참조형 변수는 데이터가 저장된 메모리 주소 가르킴 -> Heap메모리주소
- 객체데이터가 Heap영역에 저장되기 때문에!
- 객체, 배열 등이 참조형이다

why? -> 내부적으로 toString()이 오버라이딩 되어있음
기본형 -> 래퍼형으로 변환하는 과정
Integer num = 10; //내부적으로 이렇게 됨 Integer num = Integer.valueOf(10);
래퍼형 -> 기본형으로 변환하는 과정
Integer num = 10; int num2 = num; //내부적으로 int a = num.intValue();
- 래퍼형은 내부적으로 데이터를 감싸고 있어서 연산시 불리
- 객체에서 기본형 값을 꺼내 연산하는 추가작업이 발생
- 이런 추가 작업때문에 기본형보다 래퍼클래스는 속도 느림
package chapter2.wrapper;
public class PrimitiveWrapper {
public static void main(String[] args) {
int iteration = 10_000_000; // 1000만 번 반복
// 기본형 int 연산 성능 테스트
long startTime1 = System.nanoTime();
int sum1 = 0;
for (int i = 0; i < iteration; i++) {
sum1 += i; // 기본형 연산
}
long endTime1 = System.nanoTime();
long primitiveTime = endTime1 - startTime1;
// 래퍼 클래스 Integer 연산 성능 테스트
long startTime2 = System.nanoTime();
Integer sum2 = 0;
for (int i = 0; i < iteration; i++) {
sum2 += i; // 오토박싱 & 언박싱 발생
}
long endTime2 = System.nanoTime();
long wrapperTime = endTime2 - startTime2;
// 결과 출력
System.out.println("기본형(int) 연산 시간: " + primitiveTime + " ns");
System.out.println("래퍼 클래스(Integer) 연산 시간: " + wrapperTime + " ns");
System.out.println("성능 차이 (배수): " + (double) wrapperTime / primitiveTime);
}
}
