객체 지향 프로그래밍에서는 모든 것들을 객체로 다뤄야 한다
하지만 성능상의 이유로 현실과 타협 할 수 밖에 없는 경우가 있다

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