프로그래밍을 처음 배우면 보통 성능에는 관심이 없다.
회사에 입사하면 성능을 따지는 경우가 대부분이다.
그런데 가장 많이 간과하는 부분이 Boxing과 Unboxing이 아닐까 싶다.
필자도 모르는 상태에서 프로그래밍을 하다 상사에게 듣고 검색에 검색을 통해 정확하게 이해할 수 있었다.
Boxing과 Unboxing을 논하기 전에 먼저 알아야할 것이다.
바로 값 형식과 참조 형식에 관한 것이다.
------------------------------------- MSDN 참조 ------------------------------------------------
※ 값 형식
값 형식은 다음과 같은 두 개의 기본 범주로 구성됩니다.
구조체는 다음과 같은 범주로 구분할 수 있습니다.
모든 값 형식은 암시적으로 System.ValueType에서 파생됩니다.
※ 참조 형식
다음 키워드는 참조 형식을 선언하는 데 사용됩니다.
C#는 다음과 같은 기본 참조 형식도 제공합니다.
--------------------------------------------------------------------------------------------------------------
그럼 이제 본격적으로 Boxing과 Unboxing에 대해 이야기를 해보자.....
위에서 보는 바와 같이 값 형식과 참조 형식이 있다. 그렇기 때문에 두형식간의 형식 변화가 필요한데 그 형식 변화를 Boxing과 UnBoxing이라고 한다.
Boxing : 값 형식 -> 참조 형식 (암시적)
Unboxing : 참조 형식 -> 값 형식 (명시적)
ex) Boxing, Unboxing
1 2 3 4 5 | int i = 123; // a value type object o = i; // boxing int j = (int)o; // unboxing |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class TestBoxing { static void Main() { int i = 123; // Boxing copies the value of i into object o. object o = i; // Change the value of i. i = 456; // The change in i does not effect the value stored in o. System.Console.WriteLine("The value-type value = {0}", i); System.Console.WriteLine("The object-type value = {0}", o); } } /* Output: The value-type value = 456 The object-type value = 123 */ |
내부 돌아가는 로직은
첫째. 개체 인스턴스가 지정한 값 형식을 boxing한 값인지 확인해야 한다.
두번째. 인스턴스의 값을 값 형식 변수에 복사합니다.
이다.
유의해서 볼 부분은 첫째인것 같다. 꼭 확인들 하시길 바란다.
참고로 이렇게 Unboxing을 할경우 예외가 발생할 수 있다.
호환되지 않는 값 형식에 대한 참조를 unboxing하려고 하면 InvalidCastException이 발생한다.
간단하게 Try Catch 사용해주면 땡큐 하시겠다.
이상 끝...
'C#' 카테고리의 다른 글
[C#] 내부 클래스 (1) | 2014.06.16 |
---|---|
[C#] 소멸자 Finalize (0) | 2014.06.13 |
[C#] Delegate 사용법 (0) | 2014.06.12 |
[C#]명령 프롬프트에서 컴파일 하기 CSC.exe (0) | 2014.06.11 |
[c#] 파일 찾기 및 파일 내용 읽기 (File Search) (0) | 2014.06.02 |