박싱(Boxing)과 언박싱(Unboxing)

  • 3 minutes to read

프로그래밍을 하다 보면 데이터 형식을 변환해야 할 때가 있습니다. 이러한 변환은 캐스팅(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'.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com