Java - 오토박싱, 언박싱 (Autoboxing, Unboxing)

자바에서 오토박싱(Autoboxing)과 언박싱(Unboxing)이 무엇인지 알아보겠습니다.

1. Autoboxing과 Unboxing

Autoboxing은 기본 타입(int, long, double 등)을 기본 타입의 Wrapper 클래스(Integer, Long, Double 등) 객체로 자동 변환해주는 것을 말합니다.

int n1 = 10;
long n2 = 20;
double n3 = 10.10;
float n4 = 20.20f;

// Autoboxing
Integer a1 = n1;
Long a2 = n2;
Double a3 = n3;
Float a4 = n4;

반대로, Unboxing은 Wrapper 클래스 객체를 기본 타입으로 변환해주는 것을 말합니다.

Integer a1 = Integer.valueOf(10);
Long a2 = Long.valueOf(20);
Double a3 = Double.valueOf(10.10);
Float a4 = Float.valueOf(20.20f);

// Unboxing
int b1 = a1;
long b2 = a2;
double b3 = a3;
float b4 = n4;

Java의 기본 타입과 Wrapper 클래스는 다음과 같습니다.

Primitive type Wrapper class
boolean Boolean
byte Byte
char Character
float Float
int Integer
long Long
short Short
double Double

2. Autoboxing과 Unboxing이 필요한 이유?

Autoboxing과 Unboxing을 개발자가 깔끔한 코드를 사용하게 도와줍니다.

자바에서는 ArrayList<T>처럼 제네릭으로 구현된 클래스를 사용할 때는 int와 같은 기본 타입은 사용할 수 없고 Integer처럼 Wrapper 클래스를 사용해야 합니다.

코드를 구현할 때 기본 타입을 많이 사용하는데, ArrayList<Integer>에 기본 타입을 추가하려면 매번 형변환을 해야 합니다. 이런 형식적인 코드는 개발자의 생산성을 떨어트릴 수 있는데요. 자바의 Autoboxing/Unboxing이 이런 일을 알아서 처리하기 때문에 직접 형변환을 할 필요는 없습니다.

코드로 다시 설명하면, ArrayList<Integer>에 요소를 추가할 때 int는 Integer로 자동 변환됩니다.

int num = 10;

ArrayList<Integer> list = new ArrayList<>();
list.add(num);

ArrayList에서 요소를 가져올 때도 마찬가지입니다. Integer는 int로 자동 변환됩니다.

ArrayList<Integer> list = new ArrayList<>();
list.add(10);

int num = list.get(0);
Loading script...

Related Posts

codechachaCopyright ©2019 codechacha