📚래퍼클래스를 알아봅시다.
기본자료형 을 객체로 감싸는 클래스입니다.
| 기본 자료형 (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 영역에 저장되어 있기 때문입니다.객체, 배열등이 참조형에 속합니다.
Person personA = new Person("Steve"); // ✅ 객체가 담긴 personA 는 참조형 변수입니다.
Syetem.out.println(personA.name);
System.out.println(personA); // ✅ 출력하면 @123 메모리의 주소값이 출력됩니다.
int[] arr = {1, 2, 3, 4}; // ✅ 배열이 담긴 arr 는 참조형 변수입니다.
System.out.println(arr); // ✅ 출력하면 @123 메모리의 주소값이 출력됩니다.
💡래퍼클래스도 객체입니다.
Integer num = 100;
System.out.println(num); // 출력 100
toString()이 오버라이딩되어 있기 때문입니다.📚래퍼클래스를 왜 사용하는지 알아봅시다.
Integer num = 123; // 래퍼클래스
String str = num.toString(); // ✅ 편리한 기능
int a = 100; // 그냥 데이터 100
String str = a.toString(); // ❌ 변환 불가

class CustomInteger {
// 속성
int value;
// 생성자
CustomInteger(int value) {
this.value = value;
}
// 기능
// 값을 가져오는 메서드
int getValue() {
return value;
}
// 값을 설정하는 메서드
void setValue(int value) {
this.value = value;
}
// toString() 오버라이딩 (값을 출력할 수 있도록)
@Override
public String toString() {
return String.valueOf(value);
}
}
public class Main {
public static void main(String[] args) {
CustomInteger num1 = new CustomInteger(100);
System.out.println(num1); // 100
System.out.println(num1.getValue()); // 100
num1.setValue(200);
System.out.println(num1); // 200
}
}
📚오토박싱, 언박싱에 대해서 알아봅시다.
Integer num3 = 10; // 오토박싱 (기본형을 자동으로 래퍼 클래스 객체로 변환)
int num = num3; // 오토 언박싱(참조형을 자동으로 기본형으로 변환)
📚기본형 → 래퍼형으로 변환하는 과정을 오토박싱
Integer는 참조형(객체)이지만 기본형 int 값을 직접 대입할 수 있습니다.Integer.valueOf(10)을 호출하여 객체를 생성하기 때문입니다.Integer num3 = 10; // ✅ 오토박싱
// ✅ 내부적 자동 처리(래퍼형 <- 기본형)
Integer num = Integer.valueOf(10);
📚래퍼형 → 기본형으로 변환하는 과정으로 오토언박싱
num은 Integer 객체(참조형변수)지만 기본형 int 변수에 대입할 수 있습니다.num.intValue()를 호출하여 기본형으로 변환하기 때문입니다.Integer num3 = 10;
int num = num3; // ✅ 오토 언박싱
// ✅ 내부적 자동처리(기본형 <- 래퍼형)
int a = num.intValue();
📚기본형 연산과 래퍼형 연산의 재밌는 성능 차이
public class PrimitiveVsWrapperPerformance {
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);
}
}