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에 할당
주의점
- 박싱과 언박싱은 힙에 객체 생성 + 데이터 복사를 포함하므로 성능 비용이 높음
- 가능하면 값 타입을 직접 처리하는 일반 클래스나 메서드 사용 권장
'CS > C#_C++' 카테고리의 다른 글
C++ 가상 함수(Virtual Function)와 가상 함수 테이블(VTBL) (0) | 2025.10.08 |
---|---|
C++ 캐스팅 연산자 (0) | 2025.10.07 |
C++ STL(Standard Template Library) (0) | 2025.10.04 |
C# 클래스(Class)와 구조체(Struct)의 차이점 (0) | 2025.10.03 |
(공통)C++과 C# 언어 특성 비교 (0) | 2025.10.02 |