C# 문법 4주차 - 박싱, 언박싱

Amberjack·2024년 1월 2일
0

C# 문법

목록 보기
27/44

값형과 참조형 사이의 변환을 의미한다.

🎁 박싱(Boxing)

  • 박싱은 값형을 참조형으로 변환하는 과정!
  • 값형 변수의 값을 메모리의 힙 영역에 할당된 객체로 래핑.
  • 박싱을 통해 값형이 참조형의 특징을 갖게 되며, 참조형 변수로 다뤄질 수 있다.
  • 박싱된 값형은 참조로 전달되므로 메모리 오버헤드가 발생할 수 있다.

📦 언박싱(Unboxing)

  • 언박싱은 박싱된 객체를 다시 값형으로 변환하는 과정
  • 박싱된 객체에서 값을 추출하여 값형 변수에 할당.
  • 언박싱은 명시적으로 타입 캐스팅을 해야 하며, 런타임에서 타입 검사가 이루어진다.
  • 잘못된 형식으로 언박싱하면 런타임 에러가 발생할 수 있다.

🥊 박싱과 언박싱의 주요 특징

  • 박싱과 언박싱은 값형과 참조형 사이의 변환 작업이므로 성능에 영향을 미칠 수 있다.
  • 박싱된 객체는 힙 영역에 할당되므로 가비지 컬렉션의 대상이 될 수 있다. 따라서 메모리 관리에 유의해야 함.
  • 박싱된 객체와 원래의 값형은 서로 독립적이므로 값을 수정하더라도 상호간에 영향을 주지 않는다.

▪️ 사용 예제)

✨ 그 전에... Object

  • Object는 .NET Common Type System의 일부이며, 모든 클래스의 직간접적인 상위 클래스이다. 모든 클래스는 object에서 상속되며, object는 모든 형식을 참조할 수 있는 포괄적인 타입이다.
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로 언박싱

0개의 댓글