C#/C#200제

[C#] 6일차 - 39. object 타입과 boxing, unboxing

반나무 2021. 1. 21. 15:12

C#에서의 모든 형식은 모두 Object로부터 상속됩니다.

값형식의 변수가 object타입으로 변환되는것을 Boxing이라고 하고

object타입의 변수가 값형식으로 변환되는것을 unboxing이라고 합니다.

 

object 타입은 참조형식이기 떄문에 힙에 데이터를 할당합니다.

반면 int나 double과 같은 값 형식의 자료는 stack에 데이터를 할당합니다.

 

다음 예제는 원래의 변수와 박싱된 object는 서로 다른 메모리 영역을 사용하기 떄문에 다른 값을 저장할 수 있다는 것을 알 수 있습니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A039_Object
{
    class Program
    {
        static void Main(string[] args)
        {
            int i = 123;
            object o = i;   // i의 값을 박싱하여 o로 복사합니다.
            i = i + 10;     // i의 값을 바꿉니다. o의 값은 변하지 않습니다.
            int j = (int)o; // o의 값을 언박싱 하여 j로 복사합니다.

            Console.WriteLine("The value-type value i = {0}", i);
            Console.WriteLine("The object-type value o = {0}", o);
            Console.WriteLine("The value-type value j = {0}", j);

            object p = o;
            o = 100;
            Console.WriteLine("The object-type value o = {0}", o);
            Console.WriteLine("The object-type value p = {0}", p);
        }
    }
}

반응형