[기술] 박싱(Boxing)과 언박싱(Unboxing)

oy Hong·2024년 4월 9일

기술

목록 보기
3/23

값 타입과 참조 타입


값 타입 (Value Type)
C#에서 구조체, 열거 타입 등은 값 타입이다.

참조 타입 (Reference Type)
C#에서는 모든 클래스는 참조 타입이 됩니다.


박싱 언박싱

박싱 (Boxsing)
값 타입을 참조 타입으로 변환하는 것

  • 참조 객체의 값 타입 필드를 참조 타입으로 변환한다면, 힙 메모리 내부에서도 박싱이 일어날 수 있다.

언박싱 (Unboxing)
참조 타입을 값 타입으로 변환하는 것

  • 박싱이 있어야 언박싱이 있을 수 있다.

박싱의 오버헤드

박싱의 과정
1. 힙 영역에 새로운 메모리를 할당
2. 스택의 값을 힙 메모리로 복사
3. 힙 메모리의 주소 값을 갖는 새로운 스택 메모리를 할당

값 하나를 옮기는데 메모리 참조를 많이 하게 되면서 시간적 오버헤드 발생


언박싱의 오버헤드

언박싱도 비슷한 과정을 거치지만 이 과정에서 가비지를 생성한다.

그 자체로의 오버헤드와 가비지를 생성함으로 인해 GC를 동작시키는 잠재적 오버헤드까지 가졌다.


제네릭 (Generic) 사용으로 박싱 문제를 해결할 수 있다.

0개의 댓글