Java에서 8개의 기본형(Primitive Type)은 객체로 다루지 않음
하지만, 기본형도 객체로 다뤄야 하는 경우가 있는데 이 때 사용되는 것이 Wrapper 클래스
1.
메서드의 파라미터로 객체 타입만 요구되는 경우
2.
기본형이 값이 아닌 객체로 저장해야 하는 경우
3.
객체 간의 비교가 필요한 경우
즉, 기본형(Primitive Type)을 객체화한 형태가 Wrapper Class이다.
public final class Integer extends Number implements Comparable {
...
private final int value;
...
}
Java
복사
Primitive Type과의 차이점
1.
기본형은 변수에 값을 그대로 저장하지만, Wrapper Class는 객체의 참조값을 저장한다.
2.
Wrapper Class는 내부의 값을 비교할 때 == 와 ≠ 를 사용할 수 없고, equals() 로 가능하다.
→ equals() 가 오버라이딩되어 있어 주소값이 아닌 객체가 가지고 있는 값을 비교
사용 이유
1.
기본형을 오브젝트(Object)로 변환할 필요가 있을 경우
2.
제네릭 타입을 파라미터로 받을 땐 Wrapper Class만 가능
3.
컬렉션 프레임 워크의 데이터 구조는 기본 타입이 아닌 객체만 저장할 수 있으며, Wrapper Class를 사용해 자동 박싱과 언박싱이 일어남
4.
기본형과 다르게 null 값 저장 가능
오토박싱 & 언박싱
JDK1.5 이전에는 기본형과 참조형 간의 연산이 불가능해서 Wrapper Class로 기본형을 객체로 만들어서 연산 진행
오토박싱 & 언박싱이 가능해지면서 기본형과 참조형 간의 연산 바로 가능
Before
int i = 5
Integer iObj = new Integer(7);
int sum = i + iObj; // 에러
Java
복사
After
int i = 5
Integer iObj = new Integer(7);
int sum = i + iObj.intValue();
Java
복사
자바 컴파일러가 자동으로 변환하는 코드(intValue())를 넣어준다.
기본형 → Wrapper Class(오토박싱)
Wrapper Class → 기본형(언박싱)