C#에서
Boxing과Unboxing은 무엇이며, 왜 성능 문제를 발생시킬 수 있을까요?
Boxing은 스택 메모리의 값 타입 데이터를 힙 메모리에 참조 타입 객체로 변환하는 과정이며,Unboxing은 다시 값을 스택 메모리로 가져오는 과정입니다.
이 과정에서 Heap 메모리 할당과 복사가 발생하기 때문에 성능 비용이 발생할 수 있습니다.
특히 반복적으로 발생하면 Garbage Collection의 원인이 되어 성능 저하로 이어질 수 있습니다.
값 타입을 object 또는 인터페이스 타입으로 변환할 때 발생.
int value = 10;
object obj = value; // Boxing 발생
=> 값을 감싸는 Wrapper 객체가 생성
Boxing된 객체를 다시 값 타입으로 꺼내는 과정.
object obj = 10;
int value = (int)obj; // Unboxing
=> Heap에서 Stack으로 복사 발생
// 1. 문자열 결합
int score = 100;
string text = "Score: " + score; // score가 object로 Boxing됨
// 2. Debug.Log
int score = 10;
Debug.Log(score); // Boxing 발생
=> "값 타입은 스택에 머물 때 가장 빠르다."