Understanding Boxing vs Unboxing in C#
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

Boxing vs Unboxing in C#

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

개발 툴

대상자

C#/.NET 개발자, 특히 값 형식(value type)과 참조 형식(reference type)을 다루는 중급 이상 개발자

핵심 요약

  • Boxing: 값 형식(예: int, bool)을 object 타입으로 암시적으로 변환하여 힙(heap) 메모리에 할당함.
  • Unboxing: object 타입의 박싱된 값 형식을 명시적 형변환을 통해 다시 스택(stack)에 복사함.
  • 성능 영향: 과도한 박싱/언박싱은 메모리 복사와 GC 오버헤드로 인해 성능 저하를 유발할 수 있음.

섹션별 세부 요약

1. Boxing

  • 값 형식(int, decimal)을 object 타입으로 변환할 때 자동으로 발생.
  • 힙 메모리 할당: 값이 스택에서 힙으로 복사되어 새로운 객체 생성됨.
  • 성능 고려: 반복적인 박싱은 메모리 사용량 증가와 GC 부하로 인해 비추천됨.

2. Unboxing

  • 암시적 변환의 반대: object 타입의 박싱된 값 형식을 명시적 형변환으로 원래 타입으로 변환.
  • 타입 안전성: 잘못된 형변환 시 InvalidCastException 예외 발생 가능.
  • 힙 → 스택 복사: 원본 값 형식과 동일한 값이 스택으로 복귀.

3. 실무 적용 시 주의사항

  • ArrayList(일반 컬렉션) 사용 시 박싱이 자주 발생하지만, 제네릭 컬렉션(예: List)은 박싱/언박싱을 방지.
  • 성능 민감한 애플리케이션에서는 박싱/언박싱 최소화를 권장.

결론

  • 박싱/언박싱은 값 형식과 참조 형식 간의 유연한 변환을 가능하게 하지만, 성능 최적화를 위해 제네릭 컬렉션을 사용해야 함.
  • 명시적 형변환을 통해 언박싱 시 타입 검증을 반드시 수행해야 하며, 잘못된 예외 처리는 애플리케이션 안정성에 영향을 줌.