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 |