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배의 시간이 걸림.

 

반응형