본문으로 바로가기

타입변환 (Boxing, UnBoxing)

category Development/C# 2012. 2. 24. 15:43
value 타입인지 reference 타입인지? 구조체인지 클래스인지? 각각을 언제 사용하는 것이 좋은지?
C++에서는 모든 자료형이 value 타입이며 필요에 따라서 reference 타입을 언제든지 만들 수 있다. 자바에서는 모든 자료형이 reference 타입이다.
하지만 C#에서는 타입을 정의할 때에 해당 타입의 인스턴스들이 어떤 식으로 동작할지를 미리 결정해야 한다. 나중에 타입의 형태를 변경하기 위해서는 복잡한 코드가 수반되어야 하기 때문에 최초 정의시에 올바른 결정을 내릴 수 있어야 한다. 타입에 대한 최초 정의시에 struct나 class 키워드 중 어떤 것을 사용할지를 결정하는 것은 비교적 쉬운 문제다. 하지만 개발이 많이 진척된 상황에서 타입을 변경하기란 쉽지 않을뿐더러 많은 코드의 수정이 필요하고, 문제점을 유발할 가능성을 내포하게 된다.
C#에서는 C++와 자바에서 나타났던 공통적인 문제들을 해결하기 위해서 value 타입과 reference 타입 모두가 도입되었다고 하는데....흠..

아무튼간에 값 타입과 참조 타입 간의 변환은 기억되는 장소가 다르기 때문에 좀 더 특별한 변환이 필요한데..
이러한 변환을 하는것을 boxing, unboxing 이라고 한다.

boxing
값 타입을 참조 타입으로 변환하여 값을 포함하는 객체를 힙에 생성하는 것
닷넷의 모든 타입은 object 클래스로부터 파생된다.

ex) int i = 1234;
      object box = i;

즉, 스택의 값을 힙에 저장하기 위해 객체로 포장한다.


unboxing
박싱된 참조 타입으로부터 원래의 값을 다시 추출하는 연산

ex) int k = (int)box;


누구나 알만한 내용이지만 정확한 의미를 알고 사용하는게 좋을듯...