프로그래밍에는 두가지의 변수 타입이 있다. 값 타입, 참조 타입
-값타입이란?
스택영역에 저장되며, Object를 상속 받는 구조체이다. Object -> ValueType -> (값에 따라 다른 구조) 예)int32
데이터에 직접 값이 저장된다.
-참조타입이란?
힙에 저장되고, Object를 상속받고, 해당데이터의 참조 값이 저장된다.
처음 변수를 선언하면 값타입과 달리 메모리를 생성하지 않는다.
값타입을 참조타입 처럼 감싸주는것을 박싱이라고 한다. 스택에 있는 데이터를 힙으로 복사 해오는데, 이과정에서 리소스를 많이 잡아먹는다.
int i = 1; object x = i; 이런식..
이에반해, 언박싱은
박싱과 완전히 반대개념이다. 힙에 있던데이터를 스택으로 복사해오는과정이다. 주의) 선언할 때 is 연산자를 통해서 미리 같은 타입인지 캐스팅을 해보는 것이 필요하다. 마찬가지로 리소스를 많이 잡아먹는다.
박싱과 언박싱은 리소스를 많이 잡아먹으니 제네릭으로 해결하자.
unity항목에서 이를 설명하는 이유는 구조체를 위한 필요지식이라 생각했기 때문이다.
구조체란 클래스같은 사용자가 정의 할수 있는 데이터형이다. 무슨의미 인가 하면, 변수와 메소드를 가지고 있는 클래스 같이 생긴 값타입의 데이터형이다.
특징으로,
- new 연산자를 사용하지 않고 인스턴스화 할 수 있다.
- 생성자를 선언할 수 있으나 반드시 파라미터가 있어야 한다.
- 상속은 할 수 없다.
-인터페이스(interface)를 구현할 수는 있다.
장점)
구조체는 스택에 할당되기 때문에 가비지 컬렉션이 발생하지 않아서 시스템에 부하를 적게준다.
구조체 내에 변수가 많으면, 크기가 제한적인 스택에 저장되기 때문에, 스택 오버플로우가 발생할 수 있다.
변수의 개수가 적으면 , 구조체를 사용해보자.
'Programming > C#' 카테고리의 다른 글
Effective C# - 캐스트보다 is, as를 사용하자 (0) | 2022.08.29 |
---|---|
C# - 프로퍼티(Property) (0) | 2022.07.24 |
C#- 비동기 프로그래밍(2) with 예제 (0) | 2022.06.12 |
C# - 비동기 프로그래밍_asynchronous programming (0) | 2022.05.28 |
C# - 델리게이트와 이벤트/ Delegate & Event (0) | 2022.05.14 |