포스트

Boxing, Unboxing

Boxing, Unboxing
  • 먼저
    • 힙과 스택에 대해 알아야 한다.
    • 값과 참조에 대해 알아야 한다.
    • 값 형식은 스택에 저장되며, 참조 형식은 힙에 저장됩니다.
    • 값 형식을 힙에 저장되도록 하려면 박싱이 필요하다.

💫 Q


  • Object 타입에 Value 타입을 대입하면
    • Value를 레퍼런스 타입으로 Boxing
    • Stack에 있던 ValueHeap으로 복사 후 주소값을 할당
  • 박싱과 언박싱에 대해 설명해 주세요.
  • 가비지에 대하여

💫 Boxing, Unboxing


🫧 Boxing | 박싱

값 형식의 인스턴스 -> 참조 형식으로 변환.

1
2
int n = 4615; // 값
object someObject = n; //값 -> 참조
  • Heap에 새 개체를 만들고 (새 메모리 할당)
    • 박싱된 값은 기존보다 더 많은 메모리 공간을 사용할 수 있다.
  • Stack에 있던 값 타입의 값을 개체로 복사 (복사)
  • 개체에 대한 참조를 반환 (참조)

🫧 Unboxing | 언박싱

박싱된 값 -> 원래의 값 형식으로 변환.

1
int n = (int)someObject; //참조 -> 값
  • Heap에 있던 데이터를 Stack으로 복사 (복사)

🫧 성능

  • 박싱
    • 객체를 생성 -> 사용하지 않을 때 가비지 생성
  • 언박싱
    • 박싱된 객체를 다시 값 형식으로 변환 -> 메모리 복사 잡업 -> 성능

🫧 대신

  • Generic | 제네릭 (C# 2.0)을 사용하여 박싱과 언박싱을 피할 수 있다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.