팀 프로젝트 진행 2일차
아이템의 사용되는 상점, 인벤토리, 장착관리 등을 만들고 포션을 만들고 있다.
만들다보니 Class에 대해서 제대로 이해하지 못하고 있는 것 같다.
// Test1.cs
Class Test1
{
Test2 test2 = new Test2();
public int ShopGold { get; }
}
// Test2.cs
Class Test2
{
Test1 test1 = new Test1();
public int PlayerGold { get; }
}
// Program.cs
Class Program
{
static void Main(string[] args)
{
Test2 test2 = new Test2(); // Stack OverFlow
}
}
기존에 이해했었던 것은 클래스를 new를 통해서 인스턴스화 시킬 때 스택에 Test2 test2가 들어가고, test2의 주소값이 힙에 들어간다고 생각했다.
그러니까 그냥 int i = 0; 이런식으로 초기화하면서 쓰듯이 Class도 변수로서 사용하기 위해서 저런식으로 선언한다고 생각했었는데 위 코드와 같이 각각 Test1에 있는 ShopGold라는 변수와 Test2에 있는 PlayerGold를 사용하고 싶어서 각각의 Class에 다른 Class를 new를 통해서 선언하게 되면 Test2에서 Test1으로 다시 Test1에서 Test2로 무한루프에 빠지게 된다.
internal class Program
{
static private Test1 test1;
static private Test2 test2;
static void Main(string[] args)
{
test1 = new Test1();
test2 = new Test2(test1);
test1.Test();
test2.Test();
}
}
// Test1.cs
public class Test1
{
public bool test1 = false;
public Test1()
{
Console.WriteLine("Test1 public");
}
public void Test()
{
Console.WriteLine("Test1_Test, {0}", test1);
}
}
// Test2.cs
public class Test2
{
Test1 test1;
public bool test2 = true;
public Test2(Test1 test1)
{
this.test1 = test1;
Console.WriteLine("Test2 public");
}
public void Test()
{
Console.WriteLine("Test2_Test, {0}", test2);
test1.test1 = true;
test1.Test();
}
}
// 결과
// Test1 public
// Test2 public
// Test1_Test, False
// Test2_Test, True
// Test1_Test, True
이런식으로 Test1에서는 Test2를 수정할 수 없지만 Test2에서는 Test1과 Test2 둘 다 수정 가능하게 끔 변경해서 사용했다. 근데 이게 맞는건지는 모르겠다..
오늘은 오류가 뭘지 찾아보다가 시간이 없어서 정확하게 뭐가 맞는건지는 모르겠지만, 내일 질문 후에 정확한 답을 듣고 이해하게 되면 다시 수정해야겠다.
'내배켐 Unity TIL' 카테고리의 다른 글
Unity 17일차 TIL - 재귀 함수 (스택 관리) (0) | 2024.05.03 |
---|---|
Unity 16일차 TIL - 오류 해결 (0) | 2024.05.02 |
Unity 14일차 TIL - Github (0) | 2024.04.30 |
Unity 11일차 TIL - Func, Action (0) | 2024.04.25 |
Unity 10일차 TIL - 델리게이트(Delegate), 람다(Lamda) (0) | 2024.04.25 |