본문 바로가기

CS

박싱(Boxing)과 언박싱(UnBoxing)

 

박싱(Boxing)은 값 형식을 참조 형식으로 변환해 주는 것을 의미한다.

 

반대로, 언박싱은(UnBoxing)은 박싱했던 값을 다시 원상태로 복귀시키는 것을 의미한다.

 

object타입이 참조형식이기 때문에 object형으로 형변환이 일어나는 것을 박싱이라고 하고,

원상태로 복귀시키는 것이 언박싱이다.

 

박싱/언박싱을 사용하는 예를 들면,

int[] array = new int[2];

 

이러한 배열을 만든다고 하였을 때, 배열에는 특정 타입이 필요하다. 이에 따라서 배열에는 string타입을 넣을 수 없다.

하지만 배열을 int가 아닌 object 타입으로 선언한다면,

object[] array = new object[2];

 

이러한 형식으로 구조를 짠다면 다양한 타입을 다 넣을 수 있다.

이렇게 선언을 하면 내부적으로 데이터가 배열에 들어갈 때 박싱이 일어난다. 그리고 출력 시 언박싱이 일어난다.

 

하지만 값형식이 참조형식으로 변환될 때, 스택에 있는 값을 복사하여 힙에 할당하고,

언박싱 시 다시 스택에 가져오는 작업을 하면서 힙에 가비지가 쌓이게 된다.

 

단순히 힙에 넣는 작업에 비해 박싱을 통할 시 20배에 달하는 시간이 소요되고,

언박싱 시에는 4배의 시간이 소요된다.

 

이러한 단점을 해결하기 위해서는 박싱과 언박싱을 방지할 제네릭이 필요하다.

'CS' 카테고리의 다른 글

람다식(Lambda Expression)  (0) 2024.01.19
가비지 컬렉터(GC)  (0) 2024.01.18
제네릭(Generic)  (0) 2024.01.17
델리게이트(Delegate)  (0) 2024.01.17
배열(Array)과 리스트(List)  (0) 2024.01.16