값 타입(Value type)
스택에 저장된다. 그러므로 힙에 객체로 할당되지 않아서 GC가 관리 하지 않고 포인터로 가리켜지도 않는다.
선언되는 즉시 메모리에 할당 따라서 생성과 동시에 값을 할당할 수도 있다.
int a = 10;
c#에서 값타입에는 int, 부동 소수점, double와 같은 원시 타입과 구조체
참조 타입(Reference type)
값을 별도의 메모리 공간(heap)에 저장하고 메모리의 주소를 변수명과 함께 stack에 저장한다. 참조 타입은 새로운 값을 할당하기 위해서는 new를 통해 선언을 해주어야한다.
참조 타입에는 객체, 배열, 문자열,클래스 등이 있다.
코드 예시
예를 들어서 우리집 클래스가 있다고 해보자
class myHome
{
void room()
{
}
}
만약 객체를 아래와 같이 만들게 된다면 주소는 있는데 집이 없는 상황이다.
myHome 103;
만약 객체를 아래와 같이 만들게 된다면 집을 지었는데 주소를 모르는 상황이다.
new myHome();
결과적으로 집 주소를 통해서 집에 접근하기 위해서는 아래와 같이 코드를 작성해야 한다.
myHome 103 = new myHome();
103이라는 변수를 통해서 힙 영역의 집에 접근할 수 있게 된다.
쉽게 비교해보자면 파일로 저장과 링크로 저장으로 비교할 수 있다.
파일로 저장하는 경우 그건 컴퓨터에 값을 저장해서 보낸 것이다. 그러므로 txt파일 자체를 복사해서 보낸 경우
웹 링크로 보낸 다면 그건 참조로 저장해서 보낸 것이다. 별도의 저장소에 데이터를 젖아한 후 거기에 접근할 수 있는 주소를 보낸 것이기 때문이다.
c#에서 왜 참조 타입을 아는 것이 중요할까?
변경 사항이 동일한 객체를 참조하는 다른 변수에도 반영이 될 수 있기 때문이다.
메서드에 전달하려는 대량의 데이터를 작업하는 경우 값 타입을 사용하면 데이터가 전달될 때마다 복사되므로 매우 비효율적이다. 대신 참조 타입을 사용하면 데이터에 대한 참조만 전달되므로 훨씬 빠르다.
'유니티 공부 > C# 문법' 카테고리의 다른 글
C# - const와 readonly (0) | 2024.04.09 |
---|---|
C# - 클래스(Class)와 구조체(Struct)의 차이 (0) | 2024.03.29 |
C# - SortedSet, SortedDictonary (기본생성자, IComparer생성자) (0) | 2024.03.17 |
C# - Set과 HashSet(Add,Remove,Contains,IntersectWith,UnionWith) (0) | 2024.02.20 |
C# - Windows Forms 프로젝트 사용해보기 (0) | 2024.01.20 |
댓글