# 박싱 & 언박싱

2021. 1. 24. 12:45개발/C#

 

컬렉션을 사용하면, 예를 들어 ArrayList인 list를 사용할 경우

여러가지 데이터 타입의 객체를 list에 담을 수 있고,

이때 list.Add(123)과 같이 사용할 경우, int형 변수가 object형 변수로 캐스팅되는데,

이 것을 박싱이라고 한다.  

 

그리고 int a = (int)list[0] 이런 형태로 값을 가져올 때 언박싱이 일어난다. 

 

 

object 형식은 값 형식의 데이터를 힙에 할당하기 위해 박싱 (boxing) 기능을 제공한다.

 

반대로 힙에 있던 값 형식 데이터를 값 형식 객체에

다시 할당해야 하는 경우가 있는데 이를 언박싱(unboxing)이라고 한다.

 

박싱 & 언박싱을 해야할 경우, 박싱할 때 일반적인 할당 작업보다 최대 20배의 시간이 소요될 정도로

성능이 좋지 않다

 

박싱 : 값 형식을 참조 형식으로 변환

언박싱 : 참조 형식을 값 현식으로 변환

 

 

박싱 (값 형식 -> Object) 의 과정 : 

1. 값 타입을 힙에 생성하기 위해 메모리를 힙 영역에 생성

2. 값을 힙 영역에 할당된 메모리로 복사

3. 참조할 변수에 할당된 메모리 주소를 할당

 

 

언박싱 (Object -> 값 형식) 의 과정 :

1. 박싱 값인지 확인

2. 박싱된 값이라면 값 타입 변수에 복사