Programming Language/C#
[C#] Boxing & Unboxing
lingk
2021. 5. 26. 17:54
Boxing
: 값 형식을 object 형식 또는 이 값 형식에서 구현된 임의의 인터페이스 형식으로 변환하는 프로세스
int i = 123;
object o = i;
Unboxing
: object 형식에서 값 형식으로 변환하는 프로세스 (변환할 타입을 명시적으로 지정해야 함)
o = 123;
i = (int)o; //unboxing
Generic에서의 Boxing 과 Unboxing
- 객체를 만들 때 명시한 자료형을 넣을 수 있음
- System.Collections.Generic.List<T> 같은 Generic Collection을 사용하면 값 형식의 boxing을 방지할 수 있음.
- 다형성을 적용하여 명시한 자료형의 하위 클래스도 업캐스팅 하여 넣을 수 있음
(참조형으로 바꿀 때에는 boxing이 일어나게 됨__참조형:메모리 크기가 가변 형식)
- 값 형식을 object형식으로 변환할 때에는 힙 영역에 메모리를 할당하는 작업을 동반함
(정도는 약간 덜하지만, unboxing에도 상당한 계산 과정이 필요함)
- Generic이 아닌 System.Collections.ArrayList 같은 Collection 클래스의 예와 같이 많은 수의 boxing이 필요한 경우에는 값 형식을 사용하지 않는 것이 좋음
- 값 형식을 boxing할 때는 완전히 새로운 개체가 만들어져야 하며, 이러한 작업은 간단한 참조 할당보다 최대 20배의 시간이 걸림.
반응형