Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- MonoBehaviour
- 스택영역
- 벡터
- 자료구조
- 배열
- 트리
- static_cast
- 큐
- 객체지향
- list
- 인프런
- std::unordered_map
- 기술면접
- 공부
- 반복문
- c#
- thread
- std::map
- 멀티쓰레드
- 해쉬맵
- 힙영역
- 차이점
- 스택
- 리스트
- vector
- 알고리즘
- Queue
- 프래그멘테이션
- map
- rookiss
Archives
- Today
- Total
호빵의 IT 개발소
[C#] 박싱과 언박싱 본문
박싱(Boxing)
- 값 타입의 객체 -> 참조 타입으로 변환하는 작업
- 스택에 있는 데이터가 힙으로 데이터가 힙으로 복사되는 작업을 이룬다.
- 보통 암시적으로 변환되며, 명식적 변환도 가능하다.
- 리소스를 많이 잡아먹는다.
int i = 123;
object o = i; // Boxing
Console.WriteLine(o.ToString());
언박싱(UnBoxing)
- 참조 타입 -> 값 타입으로 변환하는 작업
- 힙에 있던 데이터를 스택으로 복사를 하는 과정이다.
- 언박싱을 할 때 기존과 다른 타입으로 언박싱하거나, 해당 타입보다 작은 범위로 변환을 하면 에러가 호출된다. 그러므로 선언할 때 is 연산자를 통해 미리 같은 타입인지 캐스팅을 해보는 것이 필요하다.
- 리소슬르 많이 잡아먹는다.
int i = 123; // a value type
object o = o; // boxing
int j = (int)o; // unboxing
값 타입(Value Type)
- 값 타입은 스택 영역에 저장(int, char, double, long 등)
- 값 타입은 Object를 상속 받은 System.ValueType을 상속 받은 구조체이다.
- int -> System.Int32로 정의, 상속 관계는 Object -> ValueType -> Int32
- char -> System.Char로 정의, 상속 관계는 Object -> ValueType -> Char
참조 타입(Reference Type)
- 모든 타입의 base class인 System.Object를 상속받으며, 힙 영역에 저장
- 값 형식은 해당 데이터에 직접 값이 저장된다면, 참조 타입은 데이터에 대한 참조가 저장
- 참조 타입은 처음 변수를 선언하면 값 타입과 달리 메모리가 생성되지 않음
Class A
{
}
A a = null;
- A를 생성한다면 실제 생성된 A는 힙에 메모리를 할당하고 a는 그 값에 대한 참조만 스택에 저장
A a = new A();
- a를 새로운 aa에 할당한다면 새로운 메모리를 할당하지 않고 참조하는 값만 복사
A aa = a;
- a를 새로운 aa에 할당한다면 새로운 메모리를 할당하지 않고 참조하는 값만 복사
기술 면접 대비!
Object Type에 Value Type을 대입하면 어떤 일이 일어날까?
- 밸류(Value)를 참조타입(Reference Type)으로 박싱(Boxing)한다. 스택(Stack)에 있던 밸류(Value)를 힙(Heap)으로 복사 후 주소값을 할당
'CS(전공지식) > 프로그래밍언어' 카테고리의 다른 글
| [C#] 디자인 패턴 (0) | 2022.06.22 |
|---|---|
| [C#] 가비지 컬렉션(GC, Garbage Collection) (0) | 2022.06.22 |
| [C/C#]델리게이트(delegate), 이벤트 (event) (0) | 2022.06.20 |
| [C/C#] 지역 변수, 전역 변수 (0) | 2022.06.20 |
| [C/C#] 객체 지향 언어, 절차 지향 언어 (0) | 2022.06.20 |
Comments