2013년 12월 31일 화요일

[C#] Boxing과 UnBoxing

* Boxing

값 타입에서 참조타입으로의 변환을 의미한다.
Boxing 과정은 Stack 메모리에 저장되는 값들을 Heap 메모리로 옮긴다.

ex)
int stackValue = 10;
object boxedValue = stackValue;
* Unboxing

참조타입에서 값 타입으로의 변환을 의미한다.
Unboxing 과정은 Heap 메모리에 저장된 값들을 Stack 메모리로 옮긴다.

ex)
int stackValue = 10;
object boxedValue = stackValue;
int UnboxedValue = (int) boxedValue;

* 단점

- Boxing이 필요한 곳이 있으나 Performance와 메모리 사용량을 늘리기에 사용을 자제해야 한다.
- Unboxing은 NullReferenceException을 생기게 할 수도 있다.
ex)
int? stackValue = null;
object boxedValue = stackValue;
int unBoxed = (int)boxedValue;

* 사용이유

현재는 잘 사용하지 않으나 Generic 이전에는 사용하였다.
ex)
ArrayList x = new ArrayList();
x.Add(10); // Boxing
int y = (int) x[0];


댓글 없음:

댓글 쓰기