래퍼 클래스 변수
- 기본형 변수를 클래스로 한번 감싸는 변수
- 기본형 변수 타입명에서 첫글자를 대문자로 바꾸어서 래퍼 클래스 지정
// 박싱 VS 언박싱
// 박싱
// Integer 래퍼 클래스 num 에 21 의 값을 저장
int number = 21;
Integer num = new Integet(number); // 과거 방식
Integer num = number; // 최신 방식 : 그냥 할당하는 방식으로 사용
// 언박싱
int n = num.intValue(); // 래퍼 클래스들은 inValue() 같은 언박싱 메서드들을 제공해줍니다.
박싱 & 언박싱
- 박싱 : 기본 타입의 값을 포장 객체로 만드는 과정
- 언박싱 : 포장 객체에서 기본 타입의 값을 얻어내는 과정
public class Wrapper_Ex {
public static void main(String[] args) {
Integer num = new Integer(17); // 박싱
int n = num.intValue(); //언박싱
System.out.println(n);
}
}
래퍼 클래스
- 주요 용도
- 기본 타입의 값을 박싱해서 포장 객체로 만들기
- 래퍼 클래스로 감싸고 있는 기본 타입 값은 외부에서 변경할 수 없음
- 만약 값을 변경하고 싶다면 새로운 포장 객체를 만들어야 함
- 문자열을 기본 타입 값으로 변환 : parse + 기본타입명
- 래퍼 객체는 내부의 값을 비교하기 위해 == 연산자를 사용할 수 없음
- == 연산자는 참조 주소를 비교하기 때문
- 래퍼 클래스의 객체끼리의 비교를 하기 위해서는 equals를 사용해야 함

래퍼 클래스 구조도

참고 : Wrapper 객체
- 우리는 자연스럽게 다음과같은 원시 타입을 사용해왔습니다.

- char, int, long과 같은 것들은 실제로 “값” 이상의 의의를 가지지 않는 경우가 더 많기 때문에, 비용이 많이 드는 객체로 다루는 대신 원시타입 값 그대로를 사용합니다.
- 하지만 잘 생각해보면, 우리가 그동안 굉장히 많은 개념들을 추상화 해 왔는데, 기본형의 자료들도 충분히 추상화가 가능 할 것 같습니다.
- 예를 들면 소수, 반올림, 정수와 같은 개념들이 있겠죠
- 당연히 자바는 이러한 특징들을 추상화 해서 객체화는 해뒀습니다. 다만 값 이상의 의의를 가지지 않는 경우에는 성능상의 이유로 원시값 그대로를 사용할 뿐이죠
- 결론적으로 객체 특성을 이용한 추상적인 기능을 사용하려거나, 기본형 값 대신 객체로 저장해야 하거나,객체로의 “기능”이 필요 할 때 우리는 원시형 값들을 잠시 객체로 만들어 사용 할 수 있습니다.
- 즉 기본값을 객체화해서 “감싼다”는 의미로 이러한 객체들을 Wrapper Class라고 하는데, 위의 표처럼 대응됩니다.
- 기본값을 객체화 하는것을 박싱 이라고 하며, 객체를 다시 기본값으로 만드는 것을 언박싱이라고 합니다.
- 이러한 것들을 조금 더 문법적으로 자연스럽게 보여주기 위해서 오토박싱, 오토언박싱이라는 것도 존재합니다.
Integer num = new Integer(17); // Boxing
int n = num.intValue(); // UnBoxing
// 자동으로 컴파일러가 AutoBoxig 처리를 해주는 경우
Character ch = 'X'; // AutoBoxing
char c = ch; // AutoUnBoxing
- 박싱해서 객체화된 원시값들은 이제 클래스처럼, 구현되어있는 메소드들을 자유롭게 이용이 가능하고, 객체만 할 수 있는 것들을 할 수 있게 됩니다.
요약
- 기본형 변수를 포장해서 래퍼클래스로 만들면 각 포장한 기본변수에 대응되는 래퍼클래스에서 제공하는다양한 메서드를 사용할 수 있다.