http://msdn.microsoft.com/ko-kr/library/yz2be5wk.aspx

boxing은 값 형식을 object 형식 또는 이 값 형식에서 구현된 임의의 인터페이스 형식으로 변환하는 프로세스입니다.

CLR은 값 형식을 boxing할 때 값을 System.Object 내부에 래핑하고 관리되는 힙에 저장합니다. unboxing하면 개체에서 값 형식이 추출됩니다. 다음 예제에서는 정수 변수 i를 boxing하고 개체 o에 할당합니다.

힙과 스택

값(value) 형은 스택(STACK) 이라는 메모리공간에 생성 참조(Reference Type)형은 힙(Heap)이라는 메모리공간에 생성

 

Stack 클래스

제네릭이 아닌 간단한 후입선출(LIFO) 개체 컬렉션을 나타냅니다.

 

 

Reference Type은 보통 말하는 객체생성할때 사용

value 타입은 할당된 바이트와 자신을 변수로 가지고 있는 객체에 대한 주소만 가지고 있음

 

 

int i = 123; object o = (object)i; // boxing

그런 다음 o 개체를 unboxing하고 정수 변수 i에 할당할 수 있습니다.

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

 

boxing

은 가비지 수집되는 힙에 값 형식을 저장하는 데 사용됩니다. boxing은 값 형식을 object 형식 또는 이 값 형식에서 구현된 임의의 인터페이스 형식으로 변환하는 암시적 변환입니다. 값 형식을 boxing하면 힙에 개체 인스턴스가 할당되고 값이 새 개체에 복사됩니다.

다음과 같이 값 형식 변수를 선언합니다.

int i = 123;

 

다음 문에서는 변수 i에 암시적으로 boxing 연산을 적용합니다.

object o = i; // Implicit boxing

Boxing 변환

BoxingConversion 그래픽

다음 예제에서와 같이 명시적으로 boxing을 수행할 수도 있지만 명시적 boxing이 반드시 필요한 것은 아닙니다

 

 

예제

class TestBoxing
{
    static void Main()
    {
        int i = 123;
        object o = i;  // Implicit boxing

        i = 456;  // Change the contents of i

        System.Console.WriteLine("The value-type value = {0}", i);
        System.Console.WriteLine("The object-type value = {0}", o);
    }
}
/* Output:
    The value-type value = 456
    The object-type value = 123
*/

 

다음 문은 boxing 및 unboxing 연산을 모두 보여 줍니다.

int i = 123;      // a value type
object o = i;     // boxing
int j = (int)o;  // unboxing

 

다음 그림에서는 이전 문의 결과를 보여 줍니다.

Unboxing 변환

UnBoxing 변환 그래픽

+ Recent posts