[ Java ] Wrapper Class 란?
![[ Java ] Wrapper Class 란?](https://cdn.hashnode.com/res/hashnode/image/upload/v1739540140029/d3182fcb-3b61-4037-9604-df77adc9a844.png)
목표 : Wrapper Class에 대해 알아보고 코드로 확인해보자.
1️⃣ What
우리가 알고있는 기본형(Primitive) int, boolean, double 등은 객체가 아니다. 객체가 아니기 때문에 메서드도 제공을 못하고 제네릭도 사용할 수 없고 무엇보다 null값을 가질수 없다. 이 기본형의 한계를 해결하기 위해 나타난 것이 Wrapper이다.
→일반 클래스는 객체에서만 작동하며 기본형은 지원하지 않는다. 예를들어, 자바 컬렉션도 오로지 객체와 작동한다.
결과적으로 우리는 기본형을 객체로 바꿔야한다.
2️⃣ How
👉🏻 박싱, 언박싱
Integer intObj=Integer.valueOf(10)
valueOf 내부에서 new Integer(10)을 사용해서 객체를 생성한다. 즉, 객체로 한번 감싸서 반환한다.
성능최적화 기능 : -128~127범위의 Integer클래스를 미리 생성한다. 해당 범위 값 조회하면 미리 생성된 Integer객체 반환, 없으면 새로 new Integer()호출
▶️ factory Method : 지정 값을 나타내는 객체 반환
객체니까 == 비교하면 참조값 비교, 내부값 비교 위해서 equals() 사용
String 은 래퍼클래스가 아니기 때문에, String→ Integer 위해서 parseInt()를 사용해야한다.
int intValue=intObj.intValue()
- 래퍼 클래스에 있는 기본형 값을 다시 꺼내기
👉🏻 오토박싱, 오토언박싱
Integer boxedValue=7;
int unboxedValue=boxedValue;
-------------------------------
Integer boxedValue= Integer.valueOf(7);
int unboxedValue=boxedValue.intValue();
- 컴파일러가 대신 valueOf, xxxValue() 를 추가해준다.
3️⃣ 코드 확인
그럼 진짜 래퍼클래스에는 int로 바꿔주는 코드가 존재할까? Integer클래스를 확인해보자.
ex) Integer
//type
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
//toString
public static String toString(int i, int radix)
//parseInt
public static int parseInt(CharSequence s, int beginIndex, int endIndex, int radix)
//valueOf
public static Integer valueOf(String s) throws NumberFormatException ]
//equals
public boolean equals(Object obj)
//hashCode
public int hashCode()
//getInteger
public static Integer getInteger(String nm)
4️⃣ Pros and Cons
👉🏻 장점
- 객체가 제공하는 기능을 사용할 수 있다.
👉🏻 단점
- 메모리를 기본형 보다 더 많이 쓴다. 기본형은 단순히 그 크기만큼 공간을 차지하지만 래퍼클래스는 기본형의 값 뿐만아니라 객체를 다루는데 필요한 객체 메타 데이터를 포함하므로 더 많은 메모리를 사용한다.
⚡ 정리
Wrapper Class
기본형을 객체로 감싸서 그 값에 맞는 객체를 반환하는 클래스
![[Spring] N+1문제 발생과 분석](https://cdn.hashnode.com/res/hashnode/image/upload/v1756727965704/8c24d83c-1a9e-4b4d-b733-c130243cbc6b.png)

![[Project] 날씨에 맞는 옷 추천 서비스 : 지그재그 크롤링 여정 기록 (1) ChromeDriver를 EC2에 설치하기](https://cdn.hashnode.com/res/hashnode/image/upload/v1753843082352/c2452b33-97a4-4148-8ba4-750e5eee6aff.png)
![[Project] 날씨에 맞는 옷 추천 프로젝트: Selenium은 정말 필요한 선택이었을까? - 크롤링 삽질 기록](https://cdn.hashnode.com/res/hashnode/image/upload/v1753343114273/b32cc35e-a2e6-4085-a132-26c72f8792d9.png)
![[Spring] @Cacheable, @CachePut, @CacheEvict](https://cdn.hashnode.com/res/hashnode/image/upload/v1749265456525/51b97bad-f86e-4f0f-9b33-77eaa733176f.png)