boxing 에 대한 생각의 오류.... :: iopeni - Think of C#

나는 어쩔 수 없는 초보 인가 보다..


아니면 너무 C++ 포인터에 젖어 있어 그런가.. 당췌 알 수 없지만...


오늘 하나를 또 배웠다...


Int32 v = 5;

Object o = v;

v = 123;


이렇게 코드를 작성 했을 때 단순하게 박싱을 업캐스팅을 이용한 포인터 라고만 이해 한다면 이건 정말 생각의 오류 였던 것이다.


o의 값은 여전히 5 이다.


박싱된 o와 v는 별개 인 것이다.


이렇게 생각 해 보면 몇가지 문제가 있다.


o는 레퍼런스 타입이다. 레퍼런스 타입이라는 것은 언제든 가베지 컬렉터가 수집하여 소거 하여야 하는데, Value 타입으로 부터 파생되었으므로 명시적으로 소거를 할 수 없다. 


더불어 박싱이 일어 나게 된다면 일어나는 만큼 값 복사가 될 것이다.


이는 퍼포먼스 측면에서도 메모리 사용 측면에서도 상당한 스트레스로 작용하게 될 것이다.


예전 무식하게 프로그램을 작성하던... 명시적인 타입의 전달이 역시나, 진리로 느껴지는 순간...


ValueType을 사용하기 싫어진다... 젠장.....

'Functional World > C#' 카테고리의 다른 글

Form.ActiveForm  (0) 2013.11.07
바이트 배열 취득  (0) 2013.10.01
IEnumerator 사용하기 - 기초  (0) 2013.08.11
Generic Collections  (0) 2013.07.15
C# 5.0 async, await  (0) 2013.07.05
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,