1. 박싱과 언박싱

 

값타입은 변수의 이름을 선언함과 동시에 메모리가 할당되는것이며, 참조타입은 변수의 이름을 선언하고 그것을 생성해줘야 메모리가 할당되는 것이다.

C#은 2가지의 타입(Reference, Value)을 제공합니다. 

  • 값 형식 : structs, 열거형, 숫자형식, bool 등
  • 참조 형식 : class, interface, delegate, dynamic, object, string 등

 

 

박싱은 int나 float같은 값을 객체 안에 넣어주는 일

 

ex)object obj =10;

1. 값타입을 힙에 생성하기위함 -> 메모리를 힙에 생성

2.값을 힙영역에 할당된 메모리로 복사

3. 참조할 변수에 할당된 메모리 주로를 할당

 

 

 

 

 

 

언박싱은 이렇게 넣었던 int나 float값을 다시 빼내는 일을 뜻합니다

 

object obj = 10;

-> int b = (int)obj; (언박싱)

1. 박싱값인지 확인

2. 박싱값이라면 값타입 변수에 복사

3. 박싱한 메모리와 언박싱한 메모리 2개 존재 (가비지가 발생)

 

주의할점  1 . obj -> int 로 바꿔야 하므로 cast연산자 필요함  -> (int)

              2. 박싱된 객체여야 가능함  

             ex)  object obj = 10; 

                   string b = (string)obj ;(x)   int 값을 박싱하고 string값을 언박싱 할려고 햇으므로 

 

 

//사용하는 이유 어떤값의 형식을 사용할지 확실하지않거나 여러타입의 형식을 사용하고 싶을떄

//object형식이 모든값형식의 데이터를 담을수 있는 이유 

//Arrlist, Queue 등의 컬렉션들을 다양한 데이터타입으로 사용하기 위함 

//Arrlist.add(obejct b);    Enqueue(obejct b);

//시간소모가 크기떄문에 왠만해서는 사용하지않는것이 좋다고합니다 

   :  가비지 생성 (힙메모리 할당이 일어남) -> 가비지 컬렉션 동작 -> 성능하락으로 이어짐

 

'c , c++ , c# 이론정리' 카테고리의 다른 글

c++ string find 함수 주의할점  (0) 2020.08.17
C/C++/C# 정리및 차이점  (0) 2020.01.20

+ Recent posts