매개변수로 전달되면 사본이 생성됨. 스택(stack)에 저장.
GC의 관리를 받지 않고 선언된 영역을 벗어나면 자동으로 해제.
(ex) int, float, bool, 구조체
힙(heap)에 저장되며, 접근을 위해 객체의 주소값을 따로 저장하여 사용.
GC의 관리를 받아 사용되지 않을 경우 자동으로 해제.
(ex) string, 배열, 오브젝트, 클래스
Cat cat1 = new Cat();
Cat cat2 = new Cat();
cat2 = cat1;
같은 공간(cat1이 가리키던 곳)을 가리키는 두개의 변수가 됨.
public class Cat
{
string name;
public Cat(string s)
{
name = s;
}
public void PrintName()
{
Console.WriteLine("My name is " + this.name);
}
}
public class Execute
{
static void Main(string[] args)
{
Cat cat1 = new Cat("blue");
Cat cat2 = new Cat("purple");
cat1.PrintName(); // My name is blue
cat2.PrintName(); // My name is purple
cat2 = cat1;
cat1.PrintName(); // My name is blue
cat2.PrintName(); // My name is blue
}
}
참고 https://docs.unity3d.com/kr/2019.4/Manual/UnderstandingAutomaticMemoryManagement.html