Boxing은 값을 내부에 래핑하고 힙에 저장
값형식은 값이 직접 스택에 저장
값형식의 값을 Boxing하면 래핑해서 힙에 저장
int i = 123;
object obj = i; // 암시적 박싱
object obj = (object)i; // 명시적 박싱
int i = 123; // 갑 형식
object obj = i; // 암시적 박싱
int j = (int)obj; // 명시적 언박싱
이는 단순 참조 할당보다 최대 20배 더 오래 걸릴 수 있으며
언박싱할 때 캐스팅 프로세스는 할당보다 4배 더 오래 걸릴 수 있다
[1] 선언된 정수형 변수 i의 값 123이 스택에 저장
public class BoxingUnboxing : MonoBehaviour
{
void Start()
{
int i = 123; // [1]
}
}
[2] 선언된 object형 변수 obj가 스택메모리에 할당
public class BoxingUnboxing : MonoBehaviour
{
void Start()
{
int i = 123; // [1]
object obj; // [2]
}
}
[3] obj변수에 i값을 할당 (박싱)
public class BoxingUnboxing : MonoBehaviour
{
void Start()
{
int i = 123; // [1]
object obj; // [2]
obj = i; // [3]
}
}
obj 변수는 값을 래핑하여 힙 메모리에 저장
obj 변수는 값이 있는 힙 메모리 주소의 값을 참조
정수형 변수 i의 값이 암시적으로 박싱 된 모습
[4] 정수형 변수j에 obj변수의 값을 할당
public class BoxingUnboxing : MonoBehaviour
{
void Start()
{
int i = 123; // [1] 값형식
object obj; // [2] 참조형식
obj = i; // [3] 암시적 박싱
int j = (int)obj; // [4] 명시적 언박싱
// 언박싱은 명시적이여야 한다
}
}
변수 j 가 스택 메모리에 할당된 모습
값형식은 스택에 직접 값이 저장된다