박싱과 언박싱

유승아·2024년 4월 28일

내일배움캠프

목록 보기
31/69

박싱과 언박싱

값형과 참조형 사이의 변환 작업

1) 박싱(Boxing)

값형을 참조형으로 변환하는 과정

값형인 애를 *힙영역으로 새롭게 참조형으로 변환해서 하나 만들어 주는 것
실제로는 값형의 값인데 참조형으로 가지고 있는 것

힙(Heap) 영역 : 동적 할당을 하는 영역

2) 언박싱(Unboxing)

박싱된 객체를 다시 값형으로 변환하는 과정

3) 주요 특징

값형을 참조형으로 바꿀 때 값형이 사라지는게 아니라,
참조형으로 변환된 애가 새롭게 받아지는 것이기 때문에 메모리를 사용하게 된다.
→ 너무 많은 박싱과 언박싱이 일어나면 성능 저하가 일어난다.

4) 사용예제

오브젝트 형식은 직·간접적으로 모든 클래스의 최상위 클래스이다.

박싱과 언박싱

using System;

class Program
{
    static void Main()
    {
        // 값형
        int x = 10;
        int y = x;
        y = 20;
        Console.WriteLine("x: " + x); // 출력 결과: 10
        Console.WriteLine("y: " + y); // 출력 결과: 20

        // 참조형
        int[] arr1 = new int[] { 1, 2, 3 };
        int[] arr2 = arr1;
        arr2[0] = 4;
        Console.WriteLine("arr1[0]: " + arr1[0]); // 출력 결과: 4
        Console.WriteLine("arr2[0]: " + arr2[0]); // 출력 결과: 4

        // 박싱과 언박싱
        int num1 = 10;
        object obj = num1; // 박싱
        int num2 = (int)obj; // 언박싱
        Console.WriteLine("num1: " + num1); // 출력 결과: 10
        Console.WriteLine("num2: " + num2); // 출력 결과: 10
    }
}

리스트 활용 예제

List<object> myList = new List<object>();

// 박싱: 값 형식을 참조 형식으로 변환하여 리스트에 추가
int intValue = 10;
myList.Add(intValue); // int를 object로 박싱하여 추가

float floatValue = 3.14f;
myList.Add(floatValue); // float를 object로 박싱하여 추가

// 언박싱: 참조 형식을 값 형식으로 변환하여 사용
int value1 = (int)myList[0]; // object를 int로 언박싱
float value2 = (float)myList[1]; // object를 float로 언박싱

💡 TIP

  • 예외 처리를 할 때는 가능한 구체적인 예외 클래스를 사용하면 좋습니다.
    이렇게 하면 코드가 더욱 안정적이고 예외 상황에 대한 처리가 더욱 정확해집니다.
  • 값형과 참조형, 박싱과 언박싱의 개념을 확실히 이해해야 합니다.
    이는 C#에서 개발을 할 때 매우 중요한 개념 중 하나입니다.

0개의 댓글