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