Programmer:)

[C#] Boxing Unboxing ( 박싱과 언박싱) 본문

공부(개발)/c#

[C#] Boxing Unboxing ( 박싱과 언박싱)

ryeggg 2022. 4. 3. 13:20
반응형

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; //이런경우는 아닌건가...?



반응형
Comments