Java

[Java] Auto Boxing & Auto UnBoxing

DH_0518 2024. 1. 25. 13:11

오토박싱과 오토언박싱은 Java 1.5 version에 도입된 기능으로, Primitive Type과 Wrapper Class를 자동으로 변환시켜주는 것을 말한다. 오토 박싱, 언박싱을 알아보기 전에 Primitive Type과 그에 대응하는 Wrapper Class를 알아보자

 

Primitive Type & Wrapper Class

 

 

Wrapper Class는 OOP인 Java에서 객체처럼 사용할 수 없는 primitive type을 객체로 표현하기 위해 도입되었다. 이를 통해 원시형에 null을 할당하거나 컬렉션을 활용하는 등, 다양한 객체의 특성을 적용시킬 수 있게 되었다. 

 

 

Primitive Type & Wrapper Class 차이

  원시형(Primitive Type) 래퍼 클래스(Wrapper Class)
null 여부 null 불가 null 허용
저장 위치 Stack 메모리에 저장 -> 접근이 쉽고 빠름 Heap 메모리에 저장 -> 메모리 접근속도 느림
수정 여부 값을 그대로 저장, 값의 변경이 가능 저장된 값 변경 불가능, 인스턴스를 새로 생성해야함
특징 변수 값을 간편하게 선언 가능, 대용량 계산에 유리 객체의 특징을 가짐
Collection 사용 Collection에서 사용 불가능 Collection에서 사용 가능
Generics 사용 Generics 타입으로 사용 불가능 Generics 타입으로 사용 가능
비교 연산자 사용 가능 (>, <) compareTo()를 사용해야함
  • Wrapper Class : 기본적으로 equals(), toSTring()이 오버라이딩 되어있다

 

 

Primitive Type & Wrapper Class 종류

원시형(Primitive Type) 래퍼 클래스(Wrapper Class)
boolean Boolean
byte Byte
short Short
int Integer
float Float
long Long
double Double
char Character
void Void

 

 

 

 

 

오토 박싱 & 오토 언박싱

 

 

Wrapper Class는 원시형 자료를 객체로 다루기 위해, 내부에는 원시형 값을 그대로 두고 Wrapper Class로 감싸서 새로운 객체를 생성한다. 이러한 의미에서 Boxing(포장)은 원시형을 Wrapper 클래스로 만드는 동작, UnBoxing(포장을 푸는것)은 Wrapper 클래스를 원시형으로 변환하는 동작이라고 생각하면 쉬울 것이다.

 

Auto Boxing & Auto UnBoxing

  • 오토 박싱
    • Primitive Type을 Wrapper Class로 자동으로 변환하는 과정을 말함. 즉, Primitive Type의 값을 Wrapper Class로 자동으로 감싸는 것
    • Wrapper Class 객체에 Primitive Type을 할당하는 경우 일어난다
  • 오토 언박싱
    • Wrapper Class의 객체를 Primitive Type으로 자동으로 변환하는 과정을 말함. 즉, Wrapper Class의 값을 자동으로 Primitive Type으로 풀어내는 것
    • Primitive Type에 Warpper Class 객체를 할당하는 경우 일어난다
  • Auto Boxing/Unboxing을 사용할 때의 장단점
Auto Boxing/Unboxing 장점 Auto Boxing/Unboxing 단점
- 명시적인 형변환이 필요 없기에, 코드가 간결해지고 가독성이 향상된다 - 자동으로 형변환 되는 과정에서 내부적으로 추가적인 처리가 필요하므로, 성능 이슈가 발생한다.
- 특히 반복문에서는 주의를 해야한다 (대략5배)
- 명시적으로 처리하지 않아도 되므로 코드 작성이 편리해진다 - 기본적으로 객체가 primitive type에 비해 많은 메모리를 사용하므로, 무분별한 Wrapper Class 사용에 주의해야한다

ex) int는 8byte, Integer는 32byte를 사용한다(포인터 8byte + 객체 헤더 16byte + 데이터 8byte)

 

 

 

 

 

복습 Question

  • Integer Type인 두 객체를 대소를 비교하려면 어떻게 해야할까?
  • Wrapper Class에 기본적으로 오버라이딩 되어있는 함수는 어떤게 있을까?

 

 

 

 

 

Reference

 

기본형(primitive) vs. 래퍼 클래스(wrapper class)

자료형은 크게 ‘기본형’과 ‘참조형’으로 나뉜다.기본형(primitive type) : 계산을 위한 실제 값을 저장한다.논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double)참조형(referen

velog.io

 

[Java] 오토 박싱 & 오토 언박싱 | 👨🏻‍💻 Tech Interview

[Java] 오토 박싱 & 오토 언박싱 자바에는 기본 타입과 Wrapper 클래스가 존재한다. 기본 타입 : int, long, float, double, boolean 등 Wrapper 클래스 : Integer, Long, Float, Double, Boolean 등 박싱과 언박싱에 대한 개

gyoogle.dev

 

JMH로 알아보는 오토 박싱의 부하 | 로그프레소

쉽게 쓰여진 자바 코드에서는 일반적으로 정수 값의 목록을 List 클래스로 관리합니다. 자바 컬렉션 프레임워크는 구조적으로 잘 설계된 편이지만, 자바 언어의 한계로 프리미티브 타입을 자바

www.logpresso.com