Boxing, UnBoxing




 .Net Framework 에서 동작하는 Managed Code 의 데이터 타입은 Value Type, Reference Type 2가지가 있다. Value Type 은 스택에 메모리를 할당 하는데 프로그래밍을 하다 보면 Value Type 을 스택이 아닌 Managed Heap 에 할당할 필요가 생긴다. 이렇게 Value Type 과 Reference Type 간의 형변환 과정에서 Boxing 과 UnBoxing 이 발생하게 된다.


■ Boxing & UnBoxing

Boxing     : Value Type → Reference Type
UnBoxing : Reference Type → Value Type

Boxing  과 UnBoxing 의 발생은 내부적으로 많은 리소스를 소비하게 된다. 따라서 불필요한 메모리 생성 및 어플리케이션의 성능 저하를 일으킨다. (cf. C# 은 System.Object 를 최상위 클래스로 하여 이러한 Boxing/UnBoxing 이 많이 일어 났는데 이를 보완하기 위해 .Net Framework 2.0 에서 제네릭 문법이 추가 되었다.)


1. Boxing



Value Type 인 int 타입을 Boxing 하는 예이다.  int 타입을 메소드의 인수로 전달하기 위해 System::Object^ 타입으로 Boxing 한다. System::Object 타입은 모든 타입의 부모 클래스 이기에 가능하다.


2. UnBoxing



Boxing 의 반대 동작으로서 Managed Heap 에 할당된 인스턴스의 값을 탐색하여 스택에 값을 로드한다.





■ 참조

1. C++/CLI Primer - Enter the World of .NET Power Programming
2. safe_cast (MSND)
Posted by six605
,