C# 프로그래밍 - 박싱(Boxing)과 언박싱(Unboxing)

반응형

C# 프로그래밍 - 박싱(Boxing)과 언박싱(Unboxing)

박싱(Boxing)과 언박싱(Unboxing)은 값 타입(value type)과 참조 타입(reference type) 간의 변환을 의미합니다. 
박싱(Boxing)은 값 타입(int, char, bool, 구조체등)을 객체(참조 타입)로 변환하는 과정입니다. 값 타입은 스택에 저장되고  객체는 힙에 저장되므로 박싱을 통해 값 타입의 데이터를 힙에 저장할 수 있습니다.

사용 예시
int number = 42;                // 값 타입
object boxedNumber = number;    // 박싱

 

number라는 int 값은 boxedNumber라는 object 타입으로 박싱됩니다. 이 과정에서 int 값은 객체로 변환되어 힙에 저장됩니다.


언박싱(Unboxing)은 박싱된 객체를 다시 원래의 값 타입으로 변환하는 과정입니다. 언박싱을 수행할 때는 객체가 원래 어떤 값 타입으로 박싱되었는지 알고 있어야 하며 타입 변환이 올바르지 않으면 런타임 오류가 발생합니다.
사용 예시

object boxedNumber = 42;               // 박싱된 객체
int unboxedNumber = (int)boxedNumber;   // 언박싱

boxedNumber라는 객체를 다시 int 타입으로 언박싱합니다. 

 

박싱의 메모리 할당
박싱은 메모리 할당을 동반하므로 성능에 영향을 미칠 수 있습니다. 값 타입(int, struct등)을 객체(참조 타입)로 변환할 때 해당 값을 힙에 저장하기 위해 새로운 메모리 공간을 할당합니다. 


언박싱은 박싱된 객체를 원래의 값 타입으로 변환하는 과정으로 기존에 박싱된 객체를 참조하여 값을 가져오므로 추가적인 메모리 할당이 발생하지 않습니다(원래의 타입으로 변환하기 위해 캐스팅이 필요)

반응형

댓글

Designed by JB FACTORY