본문 바로가기
프로그래밍언어 & 프레임워크/C#

박싱(Boxing)과 언박싱(UnBoxing)

by 공부하는개미 2021. 8. 4.
반응형

 

아래 글은 C# 문법 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

📃 참고자료

* 자세한 내용은 위 링크를 참고바랍니다.

 

 

# 박싱(Boxing)

  • 값타입 Object 형식 또는 이 값 형식에서 구현된 임의에 인터페이스 형식으로 변환하는 것을 말합니다.
  • 기존에 저장된 스택영역에서 힙영역에 값 형식을 저장합니다.
  • 값 타입(Value Type)의 객체를 참조 타입(Reference Type)로 변환하는 작업을 말합니다.
int i = 123;
object o = i;  // 박싱
Console.WriteLine(o.ToString());

  • 단순한 형변환 같지만 값 타입은 스택에 저장되어 있고 참조 타입은 힙에 저장되어 있습니다.
  • 그래서 위 과정을 수행하기 위해선 스택에 저장된 값 타입을 힙 타입으로 복사가 한번 일어납니다.
  • 그리고 힙에 복사된 이 영역을 참조 타입이 가리키게 되는 일을 수행합니다.

 

 

 

# 언박싱(UnBoxing)

  • 참조 타입을 값 타입으로 변환하는 작업을 말합니다.
int i = 123;	// a value type
object o = o;	// boxing
int j = (int)o;	// unboxing

  • 박싱과 반대로, 힙에 있던 데이터를 다시 스택으로 복사가 일어납니다.
  • 박싱과 언박싱은 System.Object 타입이나 인터페이스 타입이 필요한 부분에 Value 타입의 객체를 적용하기 위해서
    필요한 기능이지만, 가능하면 쓰지 않는 것이 좋습니다.

 

언박싱 과정은 두가지의 절차

  1. 개체 인스턴스가 값 형식을 boxing한 값인지 확인
  2. 인스턴스의 값을 값 형식 변수에 복사
반응형