Boxing과 UnBoxing

다음을 살펴보자

int i = 42;
object o = i;

위 예제는 i값에는 42가 stack 영역에 있다.
이를 다시 대입해야 하는 o는 stack 영역의 것을 가지고 올 수 있을까?
안타깝게도 object는 heap영역에 메모리를 생성하고 그를 참조하므로… 바로 stack영역의 값을 참조 할 수 없다.
따라서 위 예제를 에러 없이 실행하려면..스택 영역의 42를 힙영역으로 복사하고 그것을 참조해야 한다.

실제로 이런 복사과정은 자동으로 일어나게 되며 이를 Boxing 이라고 한다.

반대의 경우를 생각해보자

object o = 43;
int i = o;

object 형의 값은 힙영역에 있다고 했다.
따라서 스택에 값을 가져야 하는 int i 는 o를 참조 하지 못한다.
에러가 난다.
이를 막으려면 object의 값을 형태변환을 하면 된다.

object o = 43;
int i = (int) o;

이렇게 heap 영역의 것을 스택영역으로 가져오는 것을 UnBoxing이라고 한다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.