C#

[TIL] C# 박싱과 언박싱

unihee1 2025. 5. 2. 20:15

1. 박싱(Boxing)이란?

값 형식을 참조 형식으로 변환하는 과정을 뜻한다.

이때 값 형식과 참조 형식이 무엇을 의미하는지는 아래의 표와 같다

 

- 값 형식과 참조 형식

  값 형식 참조형식
특징
  • 스택 메모리에 저장
  • 변수에 값을 직접 저장
  • 복사 시 값 자체가 복사
  • 힙(Heap) 메모리에 저장되고 스택에는 주소(참조) 저장
  • 복사 시 주소만 복사(같은 객체를 참조)
대표적인 형식
  • 기본형: int, float, bool, char
  • 구조체(struct): struct, Vector3, Quaternion 등
  • 열거형(enum)
  • 클래스(class): string, GameObject, List<T>,
    사용자 정의 클래스 등
  • 배열: int[], string[] 등
  • 델리게이트(delegate), 인터페이스(interface)

 

- 예시 코드

int num = 123;         
object obj = num;

위의 코드와 같이 값 형식으로 정의한 num을 참조 형식으로 변환하는 과정은 박싱이라고 한다.

참조 형식으로 변환활 때 num의 값을 복사하여 힙에 저장하고 obj는 그 힙의 주소를 참조한다.

 

2. 언박싱(Unboxing)이란?

박싱된 객체를 다시 원래의 값 형식으로 변환하는 과정이다.

 

- 예시 코드

object obj = 123;       
int num = (int)obj;

언박싱할 때는 명시적 형변환이 필요하기 때문에 위의 코드와 같이 (int)obj;를 하여 형변환 해준다. ( 힙에서 값을 꺼내 스택에 복사 )

 

3. 박싱과 언박싱의 장단점

- 장점

  • 다양한 형식을 하나의 구조로 처리 가능하다.
  • 값 형식도 참조 형식처럼 다룰 수 있어 인터페이스나 공통 메서드 호출이 가능하다

- 단점

  • 박싱 시 힙에 객체가 생성되거나 언박싱 시 캐스팅 및 복사가 발생하여 성능 저하의 원인이 된다.
  • 박싱된 값은 힙에 할당되어 가비지 컬렉션 대상이 된다.

 

'C#' 카테고리의 다른 글

[TIL] C# 가비지 컬렉터(Garbage Collector)  (0) 2025.05.12
[TIL] C# 다이아몬드 문제와 해결법  (1) 2025.05.07
[TIL] 직렬화 (Serialization)  (1) 2025.03.11
[TIL] C#의 반복자 인터페이스  (0) 2025.03.10
[TIL] C# 싱글톤 패턴  (0) 2025.03.06