Wrapper class
ArrayList<int> nubmers = new ArrayList<int>(); // Invalid
ArrayList<Integer> numbers = new ArrayList<Integer>(); // Valid
primitive type의 데이터를 객체로 취급해야 하는 경우가 있습니다.
이럴 경우 primitive type의 데이터를 객체로 포장해주어야 하는데 이때 사용하는 클래스를 Wrapper class라고 합니다.
기본형 타입의 래퍼 클래스는 java.lang 패키지에 포함되어있습니다.
| 기본타입 | 래퍼클래스 |
|---|---|
| byte | Byte |
| short | Short |
| int | Integer |
| long | Long |
| float | Float |
| double | Double |
| char | Character |
| boolean | Boolean |
Integert와 Character를 제외한 나머지 래퍼 클래스는 앞자리를 대문자로 작성하면 됩니다.
Wrapper class 객체 생성
생성자나 정적 스태틱 메서드를 이용하여 객체를 생성합니다.
Integer i1 = new Integer(10); // JDK9 버전부터 Deprecated되었습니다.
Integer i2 = Integer.valueOf(10);
Wrapper class 비교시 주의점
절대 동등성 비교(== 비교)를 하면 안됩니다.
Integer integer1 = Integer.valueOf(127);
Integer integer2 = Integer.valueOf(127);
System.out.println(integer1 == integer2); // true
System.out.println(integer1.equals(integer2)); // true
Integer integer3 = Integer.valueOf(128);
Integer integer4 = Integer.valueOf(128);
System.out.println(integer3 == integer4); // false
System.out.println(integer3.equals(integer4)); // true
객체의 동등성 비교는 주소의 값이 같은지 비교하기 때문에 동일성 비교를 통해 객체의 값이 같은지 비교해야 합니다.

Integer.valueOf() 메서드는 -128부터 127까지의 숫자는 캐시에 저장하고 반환하기 때문에 127일 때의 값은 true가 나왔지만 그 이상인 128을 비교했을 때는 false가 나왔습니다.
언제 실수할지 모르기 때문에 값을 비교할 때는 무조건 동일성 비교해야 합니다.
AutoBoxing과 AutoUnBoxing
- 박싱: 기본 자료형의 데이터를 대응하는 래퍼 클래스로 만드는 것
- 언박싱: 래퍼 클래스 데이터를 대응하는 기본 자료형으로 만드는 것
JDK 1.5부터 박싱, 언박싱이 필요한 상황에서 컴파일러가 자동으로 처리해줍니다. 이를 오토 박싱(AutoBoxing)과 오토 언박싱(AutoUnBoxing)이라고 합니다.
// 수동박싱과 수동언박싱
Integer wrapperInteger = Integer.value(10);
int intValue = wrapperInteger.intValue();
// 오토박싱과 오토언박싱
Integer autoBoxing = 10;
int autoUnboxing = autoBoxing;
이를 통해 기본 타입과 래퍼 클래스 간의 연산도 가능합니다.
Integer i1 = Integer.valueOf(10);
Integer i2 = 10;
int i3 = i1 + i2;반응형
'Java' 카테고리의 다른 글
| [Java] 배열을 ArrayList로 변환 (0) | 2020.06.30 |
|---|---|
| [Java] 자바 날짜, 시간 API의 형변환 방법 (0) | 2020.06.29 |
| [Java] LocalDateTime (0) | 2020.06.28 |
| [Java] 배열을 복사하는 방법 (0) | 2020.06.17 |
| [Java] java.util.Date와 java.sql.Date의 차이점 및 변환 (0) | 2020.06.14 |