Java의 오토박싱과 언박싱
Autoboxing은 원시 데이터 유형을 동등한 래퍼 유형으로 변환하고, unboxing은 래퍼 유형을 원시 데이터 유형으로 변환합니다. 이 기능은 Java에 내장되어 있습니다.
이 자습서는 Java에서 자동 박싱 및 언박싱 사용을 설명하고 보여줍니다.
Java의 자동 박싱
위에서 언급했듯이 자동 박싱은 기본 데이터 유형을 객체와 동일한 래퍼 유형 클래스로 변환합니다. 예를 들어 long
은 Long
으로, int
는 Integer
로 변환합니다.
이러한 기본 데이터 유형 및 해당 래퍼 유형 클래스의 목록은 다음과 같습니다.
원시 유형 | 래퍼 유형 |
---|---|
int |
Integer |
boolean |
Boolean |
double |
Double |
float |
Float |
byte |
Byte |
char |
Character |
long |
Long |
short |
Short |
Java에서 자동 박싱을 사용할 수 있는 세 가지 경우가 있습니다.
- 모든 메소드에서 기본 데이터 유형을 매개변수로 전달해야 합니다. 해당 메서드에는 해당 래퍼 클래스 개체가 필요합니다.
- 해당 래퍼 클래스가 있는 변수에 기본 데이터 유형을 할당하는 동안.
- 컬렉션 프레임워크 클래스로 작업하는 동안 컴파일러는 Java에서 오토박싱을 수행해야 합니다.
세 가지 경우가 있습니다. 각 경우에 대한 예를 만들어 보겠습니다. 첫 번째 경우의 예를 참조하십시오.
package Delfstack;
public class Autoboxing_Test {
public static void Number(Integer x) {
System.out.println(x);
}
public static void main(String[] args) {
// Compiler performs Autoboxing here. it converts primitive type to wrapper type Integer object.
int x = 10;
Number(x);
}
}
래퍼 클래스 Integer
가 필요한 메소드에 기본 유형 int
를 매개변수로 전달했습니다. 컴파일러는 여기에서 오토박싱을 수행합니다. 출력 참조:
10
두 번째 경우의 예를 참조하십시오.
package Delfstack;
public class Autoboxing_Test {
public static void main(String[] args) {
// Assigning primitive long value to Wrapper Long variable x. Compiler performs autoboxing
Long x = 430L;
// Assigning primitive char value to Wrapper Character variable y. Compiler performs autoboxing
Character y = 'a';
System.out.println(x);
System.out.println(y);
}
}
래퍼 유형 변수에 원시 데이터 유형 값을 할당하고 컴파일러가 자동 박싱을 수행했습니다. 출력 참조:
430
a
세 번째 경우의 예를 참조하세요.
package Delfstack;
import java.util.ArrayList;
public class Autoboxing_Test {
public static void main(String[] args) {
ArrayList<Long> Long_List = new ArrayList<Long>();
// while working with collections framework the compiler performs autoboxing
Long_List.add(220L);
Long_List.add(330L);
System.out.println(Long_List);
}
}
컬렉션 프레임워크 클래스로 작업하는 동안 컴파일러는 위 코드와 같이 Java에서 오토박싱을 수행해야 합니다. 래퍼 유형 Long
목록에 기본 유형 long
요소를 추가합니다. 출력 참조:
[220, 330]
Java에서 언박싱
Java의 unboxing은 래퍼 클래스의 객체를 동일한 기본 데이터 유형으로 변환합니다. 오토박싱의 반대 작업입니다. 예를 들어 Integer
를 int
로 또는 Long
을 long
으로 변환하는 경우 이전 테이블을 복싱에도 사용할 수 있으며 그 반대의 경우도 마찬가지입니다.
unboxing은 다음 세 가지 경우에도 적용할 수 있습니다.
- 원시 유형의 값이 필요한 메서드에 래퍼 클래스의 개체를 전달하는 동안.
- 래퍼 클래스 객체가 해당 프리미티브 변수에 할당될 때.
- 컬렉션 프레임워크로 작업하는 동안.
Java에서 각 경우에 대한 예를 시도해 보겠습니다. 첫 번째 경우의 예를 참조하십시오.
package Delfstack;
public class Unboxing_Test {
public static void Number(int x) {
System.out.println(x);
}
public static void main(String[] args) {
Integer x = new Integer(340);
// We passed Integer wrapper class object, the compiler will convert it to int because method
// requires int
Number(x);
}
}
컴파일러는 기본 유형의 값이 필요한 메서드에 래퍼 클래스의 개체를 전달하는 동안 언박싱을 수행합니다. 출력 참조:
340
두 번째 경우의 예:
package Delfstack;
public class Unboxing_Test {
public static void main(String[] args) {
Long x = new Long(340L);
Integer y = new Integer(450);
// Performing unboxing here. assigning Long object to primitive long type similarly Integer to
// int
long a = x;
int b = y;
System.out.println(a);
System.out.println(b);
}
}
컴파일러는 래퍼 클래스 개체가 해당 기본 변수에 할당될 때 언박싱을 수행합니다. 출력 참조:
340
450
세 번째 경우의 예:
package Delfstack;
import java.util.ArrayList;
public class Unboxing_Test {
public static void main(String[] args) {
ArrayList<Long> Long_List = new ArrayList<Long>();
Long_List.add(230L);
Long_List.add(340L);
Long_List.add(450L);
// The get method returns an Long object and we assigned it to the long primitive type
long x = (long) Long_List.get(0);
long y = (long) Long_List.get(1);
long z = (long) Long_List.get(2);
System.out.println(x);
System.out.println(y);
System.out.println(z);
}
}
ArrayList
와 같은 컬렉션 프레임워크로 작업하는 동안 컴파일러는 ArrayList
목록 요소를 기본 유형 변수에 할당하려고 하면 언박싱을 수행합니다. 출력 참조:
230
340
450
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook