데이터 타입은 값(Value)타입과 참조(Reference)타입으로 나뉜다.
Int, Float, Bool , struct, enum 등이 값 타입이다.
변수가 스택에 값 그대로를 할당한다.
new 없이 선언과 동시에 값을 할당할 수 있다.
값 타입은 복사를 하면 값 그 자체가 복사된다.
int a = 10;
int b = 20;
b = a;
debug.Log($"a : {a}");
debug.Log($"b : {b}");
-------------------------------
Log:
a : 10
b : 10
Class, String , array 등은 참조 타입이다.
변수가 힙에 값이 있는곳의 위치를 할당한다.
참조타입을 사용하기 위해서는 New를 사용해서 초기화 후, 힙에 할당된 메모리를 스택 공간에서 참조해야한다.
참조타입은 복사를 하더라도 그 값이 복사가 되는게 아니라 그 값이 있는곳의 위치가 복사된다.
예시를 이렇게 드는게 맞는지는 모르겠다.
a = new classTest();
a.classInt = 10;
b = a;
Debug.Log($"a:{a.classInt} b:{b.classInt}");
b.classInt = 30;
Debug.Log($"a:{a.classInt} b:{b.classInt}");
-------------------------------
Log:
a:10 b:10
a:30 b:30
b.classInt = 30; 부분에서
b의 값을 바꿔준게 아니라, b의 위치에 가서 그 값을 30으로 바꿔준것.
근데 그 위치는 a의 위치니까? a도 30으로 나온다..