One_KWS

박싱(Boxing) & 언박싱(Unboxing) 본문

C#

박싱(Boxing) & 언박싱(Unboxing)

One-Kim 2023. 5. 7. 21:18

박싱(Boxing)

값 타입(Value Type)을 참조 타입(Reference Type)으로 변환하는 것을 박싱이라고 한다. 

값 타입은 스택에 저장되고 참조 타입은 힙에 저장이 된다. 박싱된 값은 힙 메모리에 저장되며, 이 때문에 메모리 오버헤드가 발생한다.

int i = 123;

// Boxing copies the value of i into object o.
object o = i;

 

언박싱(Unboxing)

참조 타입을 값 타입으로 변환하는 것을 언박싱이라고 한다. 박싱된 값은 힙 메모리에서 스택 메모리로 복사된다. 이 때 복사가 발생하므로 성능에 영향을 줄 수 있다.

int i = 123;      // a value type
object o = i;     // boxing
int j = (int)o;   // unboxing

 

박싱, 언박싱의 단점

박싱은 값 형식을 힙에 할당된 참조 형식으로 변환하는 것이므로 메모리 할당이 필요하고 이로 인해 메모리 사용량이 증가한다. 또한, 박싱된 값은 힙에 존재하기 때문에 값을 사용할 때마다 스택에서 힙으로 복사해야 한다. 따라서, 박싱 언박싱은 성능에 부정적인 영향을 미치므로 성능이 중요한 부분에서는 값 형식과 참조 형식을 명확하게 구분하고 적절한 방법으로 사용해야 한다.

'C#' 카테고리의 다른 글

==, Equals(), ReferenceEquals()  (0) 2023.05.21
CLR, IL, JIT  (0) 2023.03.29
Value Type, Reference Type  (0) 2023.03.01
Reflection  (0) 2023.02.14