박싱(Boxing)과 언박싱(Unboxing)
추천 자료: ASP.NET Core 인증 및 권한 부여
프로그래밍을 하다 보면 데이터 형식을 변환해야 할 때가 있습니다. 이러한 변환은 캐스팅(casting) 또는 Convert
클래스와 같은 변환 API를 통해 수행할 수 있습니다.
값 형식 데이터를 참조 형식 데이터로 변환하는 과정을 박싱(Boxing)이라고 하며, 반대로 참조 형식 데이터를 값 형식 데이터로 변환하는 과정을 언박싱(Unboxing)이라고 합니다.
박싱(Boxing)
박싱은 값 형식 데이터를 참조 형식 데이터로 변환하는 작업입니다. 이를 통해 데이터를 "포장"하는 개념으로 볼 수 있으며, 이 과정에서 추가적인 프로그래밍 비용이 발생합니다.
다음은 박싱의 예제 코드입니다.
코드: Boxing.cs
using System;
class Boxing
{
static void Main()
{
int i = 1234; // 값 형식(정수형) 선언
object o = i; // 박싱: 값 형식을 참조 형식으로 변환
Console.WriteLine(o); // 1234
}
}
1234
박싱은 값 형식 데이터를 스택 메모리에서 힙 메모리로 이동시킵니다. 이러한 변환은 시간과 메모리가 추가적으로 소비되는 작업입니다.
언박싱(Unboxing)
언박싱은 참조 형식 데이터를 값 형식 데이터로 변환하는 작업으로, 박싱된 데이터를 다시 "포장을 푸는" 과정입니다. 언박싱은 캐스트(cast) 또는 캐스팅(casting)으로 표현하기도 합니다.
다음은 언박싱의 예제 코드입니다:
코드: Unboxing.cs
using System;
class Unboxing
{
static void Main()
{
object o = 1234; // 박싱된 정수를 포함하는 개체 생성
int i = (int)o; // 언박싱: 참조 형식을 값 형식으로 변환
Console.WriteLine(i); // 1234
}
}
1234
object
형 변수에 저장된 데이터를 특정 값 형식으로 변환하려면 명시적으로 형식을 지정해야 합니다. 즉, (int)
또는 Convert.ToInt32()
같은 형식 변환 관련 기능을 명시적으로 지정해 주어야 합니다.
코드: ExplicitConversion.cs
> object o = 12.34;
> int i = Convert.ToInt32(o);
> i
12
잘못된 데이터를 변환하려고 시도하면 오류가 발생합니다.
코드: InvalidUnboxing.cs
> object o = "Hello";
> int i = (int)o;
지정한 캐스트가 잘못되었습니다.
System.InvalidCastException: Unable to cast object of type 'System.String' to type 'System.Int32'.
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!