Boxing, UnBoxing

김재섭·2022년 12월 8일
0

박싱과 언박싱은 일종의 형변환이다.

우선 박싱과 언박싱은 지난 글 값타입, 참조타입에 이어지는 내용이다. 이 한줄은 꼭 기억하자.

값타입은 스택에, 참조타입은 힙에 저장되어있다.

Boxing(박싱)

값타입의 객체를 참조타입으로 변환하는 작업.

int exValue = 100;
object exRef = exValue;

int는 값타입이고, object는 참조타입이다.
위의 코드에서는 참조타입 exRef에 값 타입 exValue을 대입하였다.

스택영역에 있는 exValue값이 exRef로 변환되면서 , 힙영역에 object 형식으로 선언되며 복사되었다.
exRef는 스택영역에 존재하며 , boxed된 exValue의 주소값을 가지고있다.

UnBoxing(언박싱)

참조타입의 객체를 값형식으로 변환하는 작업.

int exValue = 100;
object exRef = exValue;
int exSecondValue = (int)exRef;

한번 박싱한 exRef를 다시 int타입인 exSecondValue에 넣고있다.

언박싱을 할때는 다른타입으로 하거나 해당 타입보다 작은 범위로 변환을 할때는 오류가 발생한다.
그래서 is 연산자를 이용해서 미리 확인을 해야한다.

정리

박싱에는 값을 단순히 참조에 할당하는것보다 최대 20배의 시간이, 언박싱은 할당의 4배의 시간이 소모된다고 한다.
되도록 제네릭을 사용해서 박싱,언박싱을 피해야한다.

참조 https://hongjinhyeon.tistory.com/90
다음글은 제너릭이다..

profile
Unity C#

0개의 댓글