이전 포스팅인 [C#] 메모리에서 값 형식과 참조 형식에 대해서 이야기했었습니다.
박싱과 언박싱은 값 형식과 참조 형식 간의 형병환입니다.
값 형식을 참조 형식으로 변환해주는 작업입니다.
int i = 123;
object o = i; // Boxing
스택 영역에 저장된 값 형식의 변수가 힙 영역으로 복사가 일어납니다.
그리고 힙 영역에 복사된 이 데이터를 참조 형식의 변수가 가리키게 되는 것입니다.
참조 형식을 값 형식으로 변환해주는 작업입니다.
int i = 123;
object o = i;
int j = (int)o;
힙 영역에 있던 데이터가 스택 영역에 복사됩니다.
기본적으로 배열에는 선언할 때 지정한 한 가지 형식의 데이터밖에 추가할 수 없습니다.
하지만 배열을 object 형식으로 선언한다면 다양한 형식의 데이터를 배열에 추가할 수 있게 됩니다.
object[] array = new object[2];
array[0] = 1;
array[1] = "hello";
이 때 내부적으로 배열에 데이터가 추가될 때 박싱이 발생합니다.
그리고 배열의 데이터를 다시 원래 형식으로 사용하고자 할 때 언박싱이 발생하게 되는 거죠.
매우 편리해보이지만 큰 단점이 있습니다.
메모리를 사용함에 있어서 비효율적이라는 점입니다.
박싱을 할 때에는 스택 영역에 있는 값이 힙 영역에 복사되고, 언박싱을 할 때에는 힙 영역에 있던 데이터를 스택 영역으로 가져오면서 힙에 가비지가 쌓이게 됩니다.
잘 읽었습니다. 좋은 정보 감사드립니다.