C# 박싱 / 언박싱 ( Boxing / Unboxing)


박싱




값 형식 - > 참조 형식


C# 에서 모든 형식(Type)들은 Object를 상속 받습니다. 그 중에 값 형식(Value Type)을 Object로 변환하는

과정을 박싱(Boxing)이라고 합니다. 박싱을 하게 되면 힙(Heap) 영역에 새로운 메모리가 할당되고 값 형식의

값은 새로 할당된 메모리 위치로 복사 됩니다.




언박싱




참조 형식 - > 값 형식


언박싱은 박싱의 역순 입니다. 언박싱(Unboxing) 변환은 박싱된 값 형식이 해당 값을 언박싱 하려는 형식과 호환되는지

형식검사를 한 후에 값 형식 변수에 복사합니다. 언박싱을할 때 박싱할 때 와 다른 타입으로 시도하면

InvalidCastException 런타임 에러가 Throw 됩니다. 언박싱전에 is 연산자를 이용하여 형식을 검사하여 사용하면 됩니다.




박싱 언박싱 변환 동작





1. 힙 영역에 새로운 메모리가 할당되고 할당된 메모리 위치에 a 값을 복사합니다. ( 할당과 복사 )


2. b 는 새로 할당된 a의 사본값을 참조 합니다.


3. 참조 형식 - > 값 형식에 대한 변환을 언박싱이라고 하며 박싱 하기전 형식과 일치하는지 형식 검사를 한 후에 값이 복사된다.



종이에 적힌 값에 비유하면 값을 박싱할 때는 종이를 복사해서 박스에 그 복사본을 넣는 것과 같습니다.

그리고 언박싱할 때는 박스에서 그 종이의 사본을 만드는 것입니다.


힙에 새로운 개체 할당이 일어나는 박싱, 언박싱 연산의 특성 때문에 빈번하게 사용할 경우 리소스를 많이 잡아 먹습니다.

제네릭을 사용하여 해결할 수 있습니다.





+ Recent posts