[C#] 박싱과 언박싱

한승호·2022년 8월 15일

C# 공부

목록 보기
11/13

박싱과 언박싱?

  • 박싱은 값 타입을 참조 타입으로 변환해주는 것이다.
  • 언박싱은 박싱했던 것을 다시 원상태로 복귀시키는 것이다.

값 타입 (Value Type)

  • 값 타입은 Object를 상속받은 '구조체'이며, 해당 데이터에 직접 값이 저장된다.
  • 따라서, 값 타입은 스택 영역에 저장된다.

참조 타입 (Reference Type)

  • 데이터에 대한 참조가 저장되며, 변수를 선언할 때, 메모리가 생성되지 않는다.
  • 참조 타입은 힙 영역에 저장된다.

박싱

  • 스택에 저장되어 있는 값 타입을 힙 타입으로 복사하고, 복사된 영역을 참조 타입이 가리킨다.

언박싱

  • 참조 타입을 다시 값 타입으로 변환시킨다.
  • 힙 영역에 있던 데이터를 스택으로 복사하는 일이 발생한다.

편리하지만 비효율적이다

  • 스택에 있는 값을 복사해 힙에 저장하고, 다시 스택 영역에 가져오는 박싱과 언박싱 작업을 진행하면서, 힙 영역에 가비지 메모리가 쌓이게 되며, 가비지 컬렉터를 불러 비효율적이기 때문에 잘 사용하지 않는다.
  • 따라서 제네렉 (Generic)을 사용하면 문제를 해결할 수 있다.
profile
모든 실수를 경험해 더 발전하고 싶은 개발자입니다.

0개의 댓글