C# 박싱 / 언박싱 ( Boxing / Unboxing)
박싱
값 형식 - > 참조 형식
C# 에서 모든 형식(Type)들은 Object를 상속 받습니다. 그 중에 값 형식(Value Type)을 Object로 변환하는
과정을 박싱(Boxing)이라고 합니다. 박싱을 하게 되면 힙(Heap) 영역에 새로운 메모리가 할당되고 값 형식의
값은 새로 할당된 메모리 위치로 복사 됩니다.
언박싱
참조 형식 - > 값 형식
언박싱은 박싱의 역순 입니다. 언박싱(Unboxing) 변환은 박싱된 값 형식이 해당 값을 언박싱 하려는 형식과 호환되는지
형식검사를 한 후에 값 형식 변수에 복사합니다. 언박싱을할 때 박싱할 때 와 다른 타입으로 시도하면
InvalidCastException 런타임 에러가 Throw 됩니다. 언박싱전에 is 연산자를 이용하여 형식을 검사하여 사용하면 됩니다.
박싱 언박싱 변환 동작
1. 힙 영역에 새로운 메모리가 할당되고 할당된 메모리 위치에 a 값을 복사합니다. ( 할당과 복사 )
2. b 는 새로 할당된 a의 사본값을 참조 합니다.
3. 참조 형식 - > 값 형식에 대한 변환을 언박싱이라고 하며 박싱 하기전 형식과 일치하는지 형식 검사를 한 후에 값이 복사된다.
종이에 적힌 값에 비유하면 값을 박싱할 때는 종이를 복사해서 박스에 그 복사본을 넣는 것과 같습니다.
그리고 언박싱할 때는 박스에서 그 종이의 사본을 만드는 것입니다.
힙에 새로운 개체 할당이 일어나는 박싱, 언박싱 연산의 특성 때문에 빈번하게 사용할 경우 리소스를 많이 잡아 먹습니다.
제네릭을 사용하여 해결할 수 있습니다.
'프로그래밍 > C#' 카테고리의 다른 글
C# 문자열 보간법 (String Interpolation) 성능 비교 (0) | 2017.01.08 |
---|---|
C# Invoke를 사용해 크로스 스레드 문제를 해결하는 방법 (0) | 2017.01.04 |