박싱(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 |