❗게시물에 첨부된 이미지는 이응수 강사님께서 만드신 이미지임을 알립니다.
🚩 1. 래퍼 클래스(Wrapper Class)
- 기본자료형 값을 표현하는 클래스다.
- 각 기본 자료형마다 자신의 wrapper 클래스가 있다.
- 사용목적
- 기본자료형 값을 객체로 다루어야 할 때 사용한다.
- 자바의 자료구조객체는 객체만 저장할 수 있기 때문에 기본자료형값을 저장할 수 없다.
- 자바의 자료구조객체에 기본자료형값을 저장할 때는 Wrapper 객체를 생성해서 저장한다.
- 박싱-언박싱 기능으로 효율적이고 유연하게 작업할 수 있다.

🚩 2. 오토박싱-언박싱 사용하기
❗ 들어가기 앞서-Deprecated
- 자바 1.5부터 오토박싱-언박싱 기능이 추가되면서 이런 식으로 new키워드를 사용하여 기본 자료형을 담을 수 있는 객체를 생성하거나(박싱), 메서드를 이용하여 객체 안의 기본자료형 값을 반환(언박싱)하지 않아도 된다.
// 기본자료형값을 가지는 Wrapper객체 생성하기
Boolean x = new Boolean(true);
Boolean y = new Boolean("false);
Integer x = new Integer(10);
Integer y = new Integer("1234);
Double x = new Double(3.14);
Double y = new Double("3.13");
Character x = new Character('A');
// Wrapper객체에 저장된 기본자료형 값 조회하기
Boolean x = new Boolean(true);
Boolean y = x.booleanValue(); // x가 참조하는 Boolean객체가 가지고 있는 boolean값을 반환한다.
Integer x = new Integer(100); // 박싱 Boxing
int y = x.intValue(); // y에는 int타입의 정수 100이 대입된다. // 언박싱 Unboxing
long y = x.longValue(); // y에는 long타입의 정수 100이 대입된다.
double y = x.doubleValue(); // y에는 double타입의 실수 100.0이 대입된다.
Double x = new Double(3.14); // y에는 double타입의 실수 3.14가 대입된다.
double y = x.doublerValue(); // y에는 int타입의 정수 3이 대입된다.
int y = x.intValue(); // y에는 long타입의 정수 3이 대입된다.
long y = x.longValue()
📌 2-1. 오토박싱(Auto-Boxing)
- 기본자료형값을 참조자료형 타입의 변수에 대입하면, 해당 타입의 Wrapper객체를 생성하고, Wrapper객체에 기본자료형 값을 담고, 그 객체의 주소값을 변수에 대입시킨다.
- 오토박싱하면서 Integer객체를 생성하고 Integer객체의 부모객체는 Object이기 때문에 담길 수 있다.
- toString() 메소드를 실행하면 Integer클래스 안에서도 메서드 재정의가 되어있기 때문에 String타입의 결과값을 반환받을 수 있다.
Integer x = 10; // 실제 실행되는 코드 -> Integer x = new Integer(10);
Long x = 10000000L; -> Long x new Long(10000000L);
Double x = 3.14; -> Double x = new Double(3.14);
Object obj = 10; // 실제 실행되는 코드 -> Object obj = new Integer(10);
System.out.println(obj); // 출력: 10
System.out.println(obj.toString()); // 출력: 10
obj는 Integer객체의 부모객체인 Object객체를 참조한다.
* 클래스 형변환이 발생했다.

📌 2-2. 오토언박싱(Auto-Unboxing)
- Wrapper객체를 기본자료형 변수에 대입하면 Wapper객체의 boolenaValue()/intValue()/ longValue()/doubleValue()를 실행해서 Wapper객체에 저장된 기본자료형 값을 조회해서 기본자료형 변수에 대입시킨다.
Integer x = new Integer(100);
int y = x; // 실제로 실행되는 코드 -> int y = x.intValue();
Double a = new Double(3.14);
Doyble b = new Double(40.3);
double c = a + b; // 실제로 실행되는 코드 - > double c = a.doubleValue() + b.doubleValue();
✔️ 3. 마치며...
자바의 래퍼(Wrapper) 클래스는 오토박싱, 언박싱 및 다양한 유틸 메서드를 통해 다양한 기능을 제공하고 기본 자료형과 객체 사이의 다리역할을 한다. 이를 통해 기본자료형과 객체 사이의 호환성을 향상시키고 기본자료형으로 다양한 자료구조를 사용할 수 있게된다. 이러한 래퍼 클래스의 특성 및 사용법을 이해한다면 좀 더 유연하고 효율적이게 코드를 작성할 수 있다.
➕ 2023.06.20 추가기록 - 프로젝트 진행 중 전달받아야 하는 값이 int타입이었는데 null값에 대한 검증이 이루어져야 했었다. int타입은 기본자료형이기에 null값을 아예 가질 수가 없다. 그래서 NullPointerException이 발생했는데, int타입의 Wrapper Calss인 Integer타입으로 null값을 안전하게 처리할 수 있었다. 직접 사용해보니 Wrapper Class에 대한 이해도가 높아졌다.
// 유저 접근권의 존재하지 않거나, 상태가 강퇴나 탈퇴인 경우 파티 리스트로 리다이렉트
PartyAccessDao partyAccessDao = PartyAccessDao.getInstance();
Integer authNo = partyAccessDao.getAuthNoByPartyNoAndUserId(partyNo, loginId);
if (authNo != null || authNo >= 8) {
response.sendRedirect("../list.jsp?err=req&job=" + URLEncoder.encode("게시글 작성", "UTF-8"));
return;
}