이쪽 카테고리는 학습하면서 삽질 + 복습용으로 사용해야겠다.

문법중에 제네릭인데 구조적으로 자주 사용하는게 좋은데 안쓰다보니 계속 안쓰게된다.... 다시 복습겸 기본 예제 코드를 만들어서 복습했다.

public class Test<T>
{
	public T field;
	
	public Test(T t)
	{
		field = t;
	}
}

제네릭 Test.class를 만들고 클래스 인스턴스를 생성할때 생성자를 통해 변수 field에 할당 하도록 했다.  

public class m_test : MonoBehaviour
{
	public Test<int> m_int;
	public GameObject obj_test;
	public Test<GameObject> m_gobj;

	void Start()
    {
		m_int = new Test<int>(10);
		Debug.Log(m_int.field);


		m_gobj = new Test<GameObject>(obj_test);
		Debug.Log(m_gobj.field.gameObject.name);
	}
}

예로 <int>, <GameObject>두 가지로 클래스를 생성했다. Test<int>는 10을 넣고 Test<GameObject>는 TestObj라는 이름 인 GameObject를 인스펙터창에서 넣고    Test<GameObject> 클래스 생성할 때 생성자에 넣었다.

유니티 디버그 콘솔창

where T : 제약조건  (인터페이스

where T : <인터페이스 이름> 형식 인수가 지정된 인터페이스이거나 지정된 인터페이스를 구현해야 합니다. 여러 인터페이스 제약 조건을 지정할 수 있습니다. 제한하는 인터페이스는 제네릭이 될 수도 있습니다.
public interface IMonster
{
	void print();
}
public class MessagePrinter : IMonster
{
	string Message;

	public MessagePrinter(string message)
	{

		this.Message = message;
	}

	public void print()
	{
		Debug.Log(this.Message);
	}
}

public class Test<T>  where T : IMonster
{
	public T[] Array { get; set; }

	public Test(int size)
	{
		Array = new T[3];
	}

}

 

public class m_test : MonoBehaviour 
{

	Test<IMonster> test = new Test<IMonster>(3);
	void Start()
    {
		test.Array[0] = new MessagePrinter("하나");
		test.Array[1] = new MessagePrinter("둘");
		test.Array[2] = new MessagePrinter("셋");


		for (int i = 0; i < 3; i++)
			test.Array[i].print();
	}
}

+ Recent posts