boxing은 값 타입(int 같은)을 참조 타입(object)으로 변환하는 것입니다 — 힙에 있는 객체로 감쌉니다. unboxing은 그 반대(값을 다시 추출)입니다. 둘 다 성능 비용(힙 할당, 복사)이 있으며, 이를 이해하면 불필요한 오버헤드를 피할 수 있습니다.
boxing과 unboxing의 실제
number = ;
boxed = number;
unboxed = ()boxed;
boxing은 값 타입(int 같은)을 참조 타입(object)으로 변환하는 것입니다 — 힙에 있는 객체로 감쌉니다. unboxing은 그 반대(값을 다시 추출)입니다. 둘 다 성능 비용(힙 할당, 복사)이 있으며, 이를 이해하면 불필요한 오버헤드를 피할 수 있습니다.
number = ;
boxed = number;
unboxed = ()boxed;
boxing은 힙에 새 객체를 할당하고 값을 그 안으로 복사합니다; unboxing은 그것을 다시 밖으로 복사합니다. 각 boxing 연산은 힙 할당입니다 — 한 번은 저렴하지만, 핫 패스나 루프에서는 비쌉니다.
// ❌ `object`가 기대되는 곳에 값 타입 사용 → 암시적 boxing
object obj = 42; // boxing
ArrayList list = new(); list.Add(42); // boxing(비제네릭 — object로 저장)
string s = string.Format("{0}", 42); // object[] params를 위한 boxing
// 루프에서 반복적으로 boxing 가능 → 상당한 GC 압박
boxing은 흔히 암시적으로 일어납니다 — 값 타입이 object(또는 비제네릭 인터페이스)가 기대되는 곳에 사용될 때마다. 루프나 핫 패스에서 반복적인 boxing은 많은 짧게 사는 힙 객체를 만들어 성능을 해칩니다.
// ❌ 비제네릭 컬렉션 — 추가되는 모든 값 타입을 boxing
ArrayList list = new();
list.Add(42); // boxing
// ✅ 제네릭 컬렉션 — boxing 없음, 타입 안전
List<int> list = new();
list.Add(42); // boxing 없음 — int로 직접 저장
주된 해결책은 generics를 사용하는 것입니다(ArrayList 대신 List<int>) — generics는 값 타입을 boxing 없이 직접 저장합니다. 이것이 옛 비제네릭 컬렉션 대비 generics의 핵심 성능 이점 중 하나입니다.
boxing과 unboxing을 이해하는 것은 성능 좋은 C#을 작성하고 generics가 왜 중요한지 이해하는 데 중요합니다.
boxing — 값 타입을 참조 타입(object)으로 변환 — 은 힙 할당과 복사를 수반하고, unboxing은 값을 다시 복사하므로, 둘 다 성능 비용이 있습니다.
단일 boxing 연산은 저렴하지만, 문제는 boxing이 흔히 암시적으로 일어나고(값 타입이 object가 기대되는 곳에 사용될 때마다) 루프나 핫 패스에서 반복적으로 발생할 수 있어, 많은 짧게 사는 힙 객체를 만들어 GC 압박을 증가시키고 성능을 저하시킨다는 것입니다 — 미묘하고 놓치기 쉬운 성능 문제입니다.
핵심 실용 교훈은 generics가 boxing을 피한다는 것입니다: 옛 비제네릭 ArrayList 대신 List<int>를 사용하면 값 타입을 boxing 없이 직접 저장하며, 이것이 레거시 비제네릭 컬렉션 대비 generics의 주요 성능 이점 중 하나입니다(그리고 항상 제네릭 컬렉션을 사용해야 하는 핵심 이유).
boxing/unboxing이 무엇인지, 언제 일어나는지(흔히 보이지 않게), 그 성능 비용(할당, GC 압박, 특히 루프에서), generics가 어떻게 그것을 방지하는지를 이해하는 것은 효율적인 C#을 작성하고 제네릭 컬렉션이 왜 선호되는지 이해하는 데 중요한 지식입니다.
boxing은 흔하고 미묘한 성능 오버헤드의 원천이고, 그것을 피하는 것(generics를 통해)이 기본적인 성능 관행이므로, boxing/unboxing을 이해하는 것은 성능을 의식하는 C# 개발자를 구별하는 가치 있고 실용적으로 관련되는 지식이며, 값/참조 타입 모델과 generics의 이점에 대한 이해를 반영하는 잦은 면접 주제입니다.