[C#] 17. 박싱과 언박싱

Connected Brain·2025년 4월 25일

면접 질문 대비

목록 보기
17/60

박싱과 언박싱이 일어나는 과정을 메모리 관점에서 설명해주세요.

한 줄 요약

박싱 : 값 형식 데이터의 복사본을 힙 영역에 새로 생성된 object나 인터페이스 타입 객체에 담는 과정.
언박싱 : 힙의 박싱된 객체에서 값 형식 데이터를 꺼내 스택의 값 형식 변수에 복사하는 과정.
(이 과정에서 힙 메모리 할당 및 해제 비용이 발생합니다.)

박싱

  • 값 형식 변수를 참조 형식 변수에 담아, 박싱된 변수를 복사할 경우에는 얕은 복사가 발생해 같은 메모리 주소를 참조하게 됨

사용예시

int i = 123;
// The following line boxes i.
object o = i;

언박싱

  • 참조 형식 변수를 다시 값 형식으로 바꾸는 것, 값 형식으로 언박싱된 변수를 복사할 때는 깊은 복사가 발생해 실제 값의 복사본을 저장하게 됨

사용예시

o = 123;
i = (int)o;  // unboxing

메모리에 미치는 영향

  • 박싱과 언박싱 자체는 계산에 비용이 많이 요구되는 과정
  • 값 형식이 박싱 될 때 완전히 새로운 객체를 힙 영역에 만들고 이후 사용할 때 해당 메모리 주소를 할당해야하므로 1차적으로 비용이 요구되고, 다시 언박싱 할 때는 힙 영역에 해당 주소를 해제해야 하므로 다시 비용이 요구되는 과정임
  • 따라서 선언하는 변수가 참조 형식이어야 할지, 값 형식이어야 할지에 대하여 선언할 때부터 결정이 필요함
    Ex) System.Collections.ArrayList 를 사용하는데 자주 박싱이 발생해야함
    -> System.Collections.Generic.List<T>과 같은 제네릭 콜렉션을 사용

0개의 댓글