[개념] 박싱(Boxing)과 언박싱(Unboxing)

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

  • object 형식은 참조 형식이기 때문에 힙에 데이터를 할당한다.
  • int 형식이나 double 형식은 값 형식이기 때문에 스텍에 데이터를 할당한다.
  • 그런데 우리는 앞에서 값 형식의 데이터를 object 형식 객체에 담았다.

이 경우에는 어느 메모리에 데이터가 할당되는 걸까?

  • object 형식은 값 형식의 데이터를 힙에 할당하기 위한 "박싱(Boxing)" 기능을 제공한다.
  • object 형식에 값 형식의 데이터를 할당하려는 시도가 이루어지면 Object형식은 박싱을 수행해서 해당 데이터를 힙에 할당한다.
  • 박싱은 쉽게 생각해서 상자로 포장한다는 뜻이다.
object a = 20;
int b = (int)b;

a는 20을 박싱되어 저장된 힙을 참조하고 있다.
b는 a가 참조하고 있는 메모리로 부터 값을 복사하려고하는 중이다.
이때 박싱된 값을 꺼내 값 형식 변수에 저장하는 과정을 일컬어서 언박싱(Unboxing) 이라 한다.

 

예제

using System;
using static System.Console;

namespace ConsoleApp1
{
    internal class MainApp
    {
        static void Main(string[] args)
        {
            int? a = null;
            Console.WriteLine(a.HasValue); // a는 null이므로 False 출력

            a = 37;
            Console.WriteLine(a.HasValue); // a는 37을 갖고있으므로 True 출력
            Console.WriteLine(a.Value); // 37을 출력
        }
    }
}

 

참고 : https://thedotnetguide.com/csharp-boxing-and-unboxing/

 

Boxing and Unboxing in C#.Net -

Boxing in C# is the process of converting a value type to a reference type and during Unboxing process, it unwraps reference type variable to value type.

thedotnetguide.com

 

'📕 Programing > C#' 카테고리의 다른 글

✉️ C#으로 SMTP를 이용한 HTML 이메일 발송하기  (0) 2025.03.25
프로퍼티  (0) 2025.03.23
CLR (Common Language Runtime) 이란?  (1) 2025.03.14
WinForm) ControlBox  (0) 2024.10.27
JObject의 key 값을 추출하는 방법  (0) 2024.09.30

Designed by JB FACTORY