CS/C#_C++

C# 박싱(Boxing) 언박싱(Unboxing)

tae-woong 2025. 10. 3. 00:18

C#에서 박싱(Boxing)언박싱(Unboxing)은 값 타입과 참조 타입 간 변환에 사용되는 연산입니다.

(박싱/언박싱은 C#/.NET에서 정의된 개념이지만, 값 타입과 참조 타입 간 변환 자체는 다른 언어에서도 유사하게 사용됩니다.)

 

C#의 데이터 형식

C#의 데이터 형식은 크게 값 형식(Value Type)참조 형식(Reference Type)으로 나뉩니다.

  • 값 형식 (Value Type) : int, float, char, struct 등 스택(Stack) 메모리에 실제 데이터를 직접 저장하는 형식입니다. 빠르고 효율적이지만, 다른 곳으로 전달할 때 값을 복사합니다.
  • 참조 형식 (Reference Type) : class, string, object 등 스택(Stack)에는 데이터가 저장된 힙(Heap) 메모리의 주소만 저장하고, 실제 데이터는 힙(Heap)에 저장하는 형식입니다.

 

박싱(Boxing)
  • 정의 : 값 타입을 참조 타입으로 변환하는 과정
  • 특징 : 값 타입의 데이터를 힙에 새 객체로 생성, 원래 값 타입은 변하지 않음
  • 예제 :
int i = 42;
object o = i; // 박싱
  • 설명: 변수 i의 값이 object 타입의 새 객체에 담기며, o가 이를 참조

 

언박싱(Unboxing)
  • 정의 : 참조 타입을 다시 값 타입으로 변환하는 과정
  • 특징 : 객체에서 값 타입을 추출, 원래 참조 타입은 변하지 않음
  • 예제 :
object o = 42;
int i = (int)o; // 언박싱
  • 설명: 객체 o에서 값 타입 int를 추출하여 i에 할당

 

주의점
  • 박싱과 언박싱은 힙에 객체 생성 + 데이터 복사를 포함하므로 성능 비용이 높음
  • 가능하면 값 타입을 직접 처리하는 일반 클래스나 메서드 사용 권장