CS 스터디 4주차
오토박싱(Autoboxing)과 언박싱(Unboxing)
래퍼클래스 (Wrapper Class)
자바의 자료형은 크게 기본타입(Primitive type)과 참조타입(Reference type)으로 나누어진다고
지난 포스팅에서 다뤘었다.
기본타입은 int, long char, float, double, boolean 등이 있고
참조타입은 class, interface 등이 있는데 프로그래밍을 하다보면 기본 타입의 데이터들을 객체로
표현해야하는 경우가 있다.
이 때 기본 타입을 객체로 다루기 위해서 사용하는 클래스가 래퍼클래스(Wrapper class)로
즉, 기본 자료형을 객체로 래핑하여 해당 자료형에 대한 추가적인 기능을 제공하는 클래스다.
[래퍼클래스의 종류와 표기]
기본타입(Primitive Type) | 래퍼클래스(Wrapper Class) |
byte | Byte |
char | Character |
int | Integer |
float | Float |
double | Double |
boolean | Boolean |
long | Long |
short | Short |
char타입은 Chatacter, int타입은 Integer라는 이름으로 쓰이며 나머지 타입은 첫 시작을 대문자로 사용하면
래퍼클래스명이 된다.
[래퍼클래스의 구조]
래퍼클래스는들은 모두 java.lang패키지에서 제공이 되며
Java의 제일 최상위 조상클래스인 Object클래스에 포함이 되어 있다.
Autoboxing&Unboxing
박싱(boxing)과 언박싱(Unboxing)은 기본 자료형과 해당 자료형의 래퍼클래스 간의 변환을 의미하며
기본 자료형을 객체로 래핑하거나 그 반대로 객체를 기본 자료형으로 언래핑하는 과정을 말한다.
박싱(Boxing)
기본 자료형을 해당하는 래퍼클래스의 객체로 변환하는 과정
int primiveInt = 10; //기본타입
Integer boxingInt = Interger.valueOf(primiveInt); //Boxing 과정
언박싱(Unboxing)
언박싱은 래퍼 클래스의 객체에서 기본 자료형 값을 추출하는 과정
Integer boxingInt = Integer.valueOf(10);
int primitiveInt = boxingInt.intValue(); //Unboxing
오토박싱(Auto-boxing)&오토언박싱(Auto-unboxing)
JDK 1.5부터는 박싱과 언박싱이 필요한 상황에 자바 컴파일러가 자동으로 변환을 처리하기 때문에개발자가 직접 명시적 변환을 할 필요가 없어졌다.
이렇게 자동화된 박싱과 언박싱을 오토박싱/오토언박싱이라고 부른다.
[장단점]오토박싱/언박싱을 하게되면 코드가 간결해지고개발자가 직접 변환을 수행 할 필요가 없기 때문에 작업이 간편해지며코드 작성 시 발생할 수 있는 오류가 줄어든다.
자동으로 변환작업을 해주는 기능이 제공되고는 있지만 내부적으로는 추가 연산작업을 거치면서불필요한 객체 생성과 관련된 성능 저하가 우려될 수 있고런타임 시 예기치 않은 동작이 일어날 수 있다는 단점이 존재한다.
따라서 성능 저하나 잠재적 오류 최소화를 위해 조심스럽게 사용해야하며성능이 중요한 영역이라면 명시적인 변환 사용을 하는 것이 올바르다.
면접 예상 질문과 답변
Q1. 박싱과 언박싱이란?
A1. 박싱은 기본 자료형을 해당하는 래퍼클래스의 객체로 변환하는 과정이고
언박싱은 래퍼클래스의 객체에서 기본 자료형 값을 추출하는 과정입니다.
Q2. 오토박싱과 오토언박싱이란?
A2. JDK1.5이후 박싱/언박싱이 필요한 상황에 개발자대신 컴파일러가 변환을 처리해주는 것으로
박싱의 객체변환과정, 언박싱의 기본자료형 값 추출과정을 자동으로 해주는 기능입니다.
Q3. 박싱과 언박싱은 언제 사용이되는가?
A3. 기본자료형과 래퍼클래스 간의 변환을 수행할 때 사용됩니다.
예를 들면 기본 자료형을 컬렉션에 저장하거나 래퍼 클래스의 객체를 사용해야 할 때 박싱/언박싱이 필요합니다.
Q4. 오토박싱/오토언박싱의 장단점은?
A4. 오토박싱과 오토언박싱을 사용하게 된다면 코드가 간결해지고
개발자가 직접 명시적 변환 작업을 수행 할 필요가 없기 때문에 편리합니다.
하지만 성능 저하가 우려되기도 하며 개발자가 잘못된 자료형을 사용하여 예기치않은 동작이 발생할 수 있기 때문에유의해야합니다.
'🪄Interview > ✏️Study' 카테고리의 다른 글
[CS STUDY INTERVIEW] 6주차 - 캐스팅 (Casting) (0) | 2024.03.25 |
---|---|
[CS STUDY INTERVIEW] 5주차 - 직렬화(Serialization) (0) | 2024.03.11 |
[CS STUDY INTERVIEW] 3주차 - Primitive type(기본/원시타입)과 Reference type(참조타입) (1) | 2024.02.26 |
[CS STUDY INTERVIEW] 2주차 - Call by value와 Call by reference (0) | 2024.02.19 |
[CS STUDY INTERVIEW] 1주차 - 자바(Java)컴파일 (0) | 2024.02.14 |