Wrapper Class
: 기본 타입을 객체로 다루기 위해서 사용하는 클래스들
- 기본 자료형을 객체로 감싸서 사용할 수 있게 해주는 클래스
- 모든 기본 타입은 값을 갖는 객체를 생성
-> 이런 객체를 포장 객체라고 함
- 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없음
- 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 함
Integer num1 = new Integer(5); // 기본형 타입 정수를 래퍼 클래스로 감싸 객체화
Integer num1 = 5; // 이런식으로도 표현 가능
Double num2 = new Double(1.11); // 기본형 타입 실수를 래퍼 클래스로 감싸 객체화
Double num2 = 1.11;

- 컬렉션은 객체만 저장이 가능 -> 기본형은 못들어가고 래퍼 클래스를 사용해야 함
- null 사용 가능 -> 래퍼 클래스는 객체이므로 null이 가능
Boxing
: 기본 타입의 데이터 -> 래퍼 클래스의 인스턴스로 변환
UnBoxing
: 래퍼 클래스의 인스턴스에 저장된 값 -> 기본 타입의 데이터로 변환

- 래퍼 클래스는 산술 연산을 위해 정의된 클래스가 아님
- 생성된 인스턴스의 값만을 참조할 수 있기 때문에 래퍼 클래스 인스턴스에 저장된 값을 직접 변경이 불가능
- So, 래퍼 클래스를 언박싱한 뒤에 값을 변경한 뒤 박싱해야 하는 중간 단계를 거칠 필요가 있음
// 박싱
Integer num = new Integer(20);
// Integer 래퍼 클래스 num 에 20의 값을 저장
// 언박싱
(intValue) int n = num.intValue();
// 래퍼 클래스 num 의 값을 꺼내 가져온다.
// 재 포장
(박싱) n = n + 100; // 120 num = new Integer(n);

AutoBoxing & AutoUnBoxing
: 자동화된 Boxing & UnBoxing
- JDK1.5부터는 박싱과 언박싱이 필요한 상황에 자바 컴파일러가 자동으로 처리해주기 시작함
- 기본 타입 값을 직접 박싱, 언박싱하지 않아도 래퍼 클래스 변수에 대입만 하면 자동으로 박싱과 언박싱이 됨
- Auto Boxing이 반복적으로 이루어지면 애플리케이션의 성능에 영향을 미침
=> 100만건 기준으로 약 5배의 차이가 남
/* 기존 박싱 & 언박싱 */
Integer num = new Integer(17); // 박싱
int n = num.intValue(); // 언박싱
/* 오토 박싱 & 언박싱 */
Integer num = 17; // new Integer() 생략
int n = num; // intValue() 생략
래퍼 클래스 동등 비교
- 오토 언박싱을 통해 객체 값을 더하고 빼고는 문제가 없지만, 객체 값을 비교를 할 때는 조심해야 함
- 인스턴스에 저장된 값에 대한 동등 여부 판단은 동등 연산자(==)으로는 값을 비교하는 게 아닌 객체의 주소값을 비교해서 의도적이지 않은 작동이 일어남
- 따라서 래퍼 클래스의 객체 값 비교는 포장 내부의 값을 얻어 비교해야 되기 때문에, 직접 언박싱해서 비교하던가, .equals() 메소드를 통해서 비교해야 함
- 래퍼 클래스와 기본 자료형과의 비교는 자동으로 오토박싱과 언박싱을 해주기 때문에 ==연산과 .equals()연산이 모두 가능함
자료형 변환 메소드
- 객체를 포장하는 기능 외에도, 래퍼 클래스는 자체 지원하는 parse타입() 메소드를 이용하여 데이터 타입을 형 변환할 때도 사용
String str = "10";
String str2 = "10.5";
String str3 = "true";
byte b = Byte.parseByte(str);
int i = Integer.parseInt(str);
short s = Short.parseShort(str);
long l = Long.parseLong(str);
float f = Float.parseFloat(str2);
double d = Double.parseDouble(str2);
boolean bool = Boolean.parseBoolean(str3);
- Reference
https://inpa.tistory.com/entry/JAVA-%E2%98%95-wrapper-class-Boxing-UnBoxing
'JAVA' 카테고리의 다른 글
11. Error & Exception 2 (0) | 2025.04.17 |
---|---|
10. Error & Exception 1 (0) | 2025.04.16 |
8. Mutable & Immutable (0) | 2025.03.28 |
7. Call by Value vs Call by Reference (0) | 2025.03.28 |
6. Xms & Xmx (0) | 2025.03.28 |