Boxing 과 UnBoxing

Boxing 과 unBoxing은 형변환 타입입니다.

int => double , double => int 로 변환 하는것이아닌
object => int , int=> object 로 변환하는것입니다.
메모리 영역을 생각을 하고 바라 보아야합니다. 저희가 아는 데이터타입 스택영역입니다.
그래서 int-> double 은 스택영역에서의 형변환입니다.

하지만 object => int 는 힙영역에서 스택영역 즉 값 형식을 참조 형식으로 변환하는 것을 말하며 스택에 있는 데이터가 힙으로 복사
int => object 스택영역에서 힙영역으로 형변환 참조 형식을 값 형식으로 변환하는 것을 말하며 힙에 있는 데이터가 스택으로 복사가 이루어집니다.

 

이제 여기서 Boxing 은  스택영역에서 힙영역으로 형변환이 이루어지는 것입니다.

여기선 암시적 형변환 이 가능합니다.

물론 명시적 형변환 도 가능합니다.

using System;

namespace BoxingUnBoxing
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 123;
            object o = a;

            Console.WriteLine(o);
            Console.Read();

        }
    }
}

 

UnBoxing은 힙영역에서 스택영역으로 형변환이 이루어지는 것입니다.

using System;

namespace BoxingUnBoxing
{
    class Program
    {
        static void Main(string[] args)
        {
            object o = 123;

            int a = (int)o;
            
            Console.WriteLine(o);
            Console.Read();

        }
    }
}

 

 

 

 

MSDN 에 의하면 값 형식을 박싱할 때에는 완전히 새로운

개체가 만들어져야 하며, 이러한 작업에는 할당 작업보다

최대 20배의 시간이 걸린다고 한다. 언박싱 또한 캐스팅

과정이 할당 작업보다 4배의 시간이 걸릴 수 있다고 나와있다.
출처: https://grayt.tistory.com/87 [IT's me]

 

이점을 생각하고 사용하면 사용하면 더 조은 성능을 낼수있는 프로그램을 만들수있습니다.

'개발 > c#' 카테고리의 다른 글

c# 윈폼 로또 생성기  (1) 2021.05.11
C# WebBrowser 자동 로그인  (4) 2021.04.15
c# WebBrowser 만들기  (0) 2021.04.12
c# 으로 메모장 만들기  (0) 2021.04.11
Buble Sort (버블소트) 정렬알고리즘  (0) 2021.04.01

+ Recent posts