C#에서 Boxing과 Unboxing은 값 형식과 참조 형식 간 변환을 의미합니다. 이 과정은 편리하지만 성능에 영향을 줄 수 있어 이해가 필요합니다.
1. Boxing과 Unboxing 개념
Boxing은 값 형식을 객체 타입으로 변환해 힙에 저장하는 과정입니다. 반대로 Unboxing은 객체 타입을 다시 값 형식으로 변환합니다.
2. 성능 저하 원인
Boxing 시 힙 메모리 할당이 발생해 GC 부담이 커집니다. Unboxing은 타입 캐스팅 비용이 추가됩니다. 잦은 Boxing/Unboxing은 프로그램 성능 저하로 이어질 수 있습니다.
3. 성능 비교 코드
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
const int iterations = 10000000;
Stopwatch sw = new Stopwatch();
// Boxing
sw.Start();
object boxed = 0;
for (int i = 0; i < iterations; i++)
{
boxed = i; // Boxing 발생
}
sw.Stop();
Console.WriteLine($"Boxing: {sw.ElapsedMilliseconds} ms");
// Unboxing
sw.Reset();
sw.Start();
int unboxed = 0;
boxed = 123;
for (int i = 0; i < iterations; i++)
{
unboxed = (int)boxed; // Unboxing 발생
}
sw.Stop();
Console.WriteLine($"Unboxing: {sw.ElapsedMilliseconds} ms");
}
}
4. 성능 최적화 팁
- 값 형식을 가능한 한 객체로 박싱하지 않고 사용합니다.
- 제네릭을 활용해 Boxing/Unboxing 발생을 막습니다.
- 불필요한 캐스팅은 피하고 명확한 타입 사용을 권장합니다.
결론적으로 Boxing과 Unboxing은 편리하지만, 자주 사용하면 성능 저하를 일으킵니다. 알고 쓰면 효율적인 C# 코드를 작성할 수 있습니다.
'C#' 카테고리의 다른 글
| C# 인터페이스 분리 원칙(ISP) 적용 사례 (0) | 2026.06.16 |
|---|---|
| C# Attribute 기반 로깅 시스템 구현 (0) | 2026.06.16 |
| C# 메서드 인라인(Method Inlining)과 성능 영향 (1) | 2026.06.15 |
| C# ThreadAbortException 처리 전략 (0) | 2026.06.15 |
| C# Nullable 연산자(??, ??=, ?.) 심층 이해 (0) | 2026.06.12 |