[C#공부] Boxing & Unboxing

2018. 1. 6. 16:12

# Boxing이란?

Boxing은 value type의 값을 object type으로 변환하는 것을 말한다.

닷넷 프레임워크에서 모든 타입은 object type의 상속을 받는다.

그래서 value type의 값을 좀 더 큰 영역으로 포장한다고 하여 Boxing이라고 한다.

* int type의 값을 Boxing한 코드이다.

# Unboxing이란?

Boxing의 반대로 object type의 변수가 가지고 있는 값을  value type으로 변환하는 것을 말한다.

* 여기서 주목할 것은 boxing에서 암시적 타입변환, unboxing에서 명시적 타입변환을 사용한다는 것이다.

  이유는 앞서 말했듯이, object type이 모든 타입을 상속하기 때문이다.


위의 내용을 메모리 영역에서 보면 아래와 같다.

# 그렇다면 Boxing, Unboxing은 언제 사용하는가?

다음은 박싱과 언박싱을 사용하는 예제이다.

* 'first group', 'second group'이라는 string value와 1~9까지의 int value가 object타입인 ArrayList 컬렉션에 박싱되었다.

  그리고 합계인 Sum 값의 연산을 위해 언박싱하였다.


이처럼 어떠한 타입의 값을 저장하게 될지 명확하지 않을 때, 혹은 여러 타입의 값을 담고자 할 때 Boxing을 사용할 수 있다.


* MSDN에서는 많은 수의 박싱이 요구될 경우, 성능저하의 우려가 있으므로 가급적이면 value type을 사용하지 않고 제네릭을 사용할 것을 권고한다.


BELATED ARTICLES

more