Programmer:)
[C#] Boxing Unboxing ( 박싱과 언박싱) 본문
반응형
Value Type (값 형식) : 실질적인 데이터의 값 (ex : int, float, bool)
Reference Type (참조 형식) : 값의 데이터 주소를 가지고 있는 값 (ex : array, list..)
Value Type를 저장하는 곳은 Stack(스택)
Reference Type를 저장하는 곳은 Heap(힙)
Boxing (value -> Object)
-스택에 있는 데이터가 힙으로 복사되는 작업 (Stack -> Heap)
-리소스를 많이 잡아먹는다.
Unboxing (Object -> value)
-힙에 있는 데이터가 스택으로 복사하는 과정 (Heap -> Stack)
-리소스를 많이 잡아먹는다.
ArrayList arrayList = new ArrayList();
arrayList.Add(1); //Boxing
arrayList.Add(2); //Boxing
foreach(var item in arrayList)
{
int i = (int)item; //Unboxing
Consol.WriteLine(i);
}
///////// 제네릭사용 ///////
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
foreach(var item in list)
{
Consol.WriteLine(i);
}
#Boxing과 Unboxing하는 작업은 많은 리소스와 시간이 들기때문에 제네릭을 사용하여 처리하는것이 바람직하다고 한다.
#ArrayList의 Add의 경우 매개변수로 object를 받기 때문 필연적으로 박싱이 일어난다.
(public virtual int Add (object value))
#만약 사용해야한다면 is 캐스팅을 통하여 오류를 최소화 해야한다
??
Object 에 value를 넣거나 value에 Object를 복사할 때 일어나는게 박싱 언박싱인건가..?
int[] a = new int[];
int b = 1;
a[2] = b; //이런경우는 아닌건가...?
반응형
'공부(개발) > c#' 카테고리의 다른 글
Shallow Copy vs Deep Copy (얕은복사,깊은복사) (0) | 2023.07.10 |
---|---|
[C#] Stack vs Heap (스택 vs 힙) (0) | 2022.04.10 |
[C#] Struct vs Class (구조체 vs 클래스) (0) | 2022.04.02 |
C# 람다식(Lambda Expression) (0) | 2020.02.20 |
C#델리게이트(Delegate) (0) | 2020.02.20 |
Comments