설명: 아직 많은 코드를 알지는 못하지만 클래스나 메서드를 생성할 때 매개 변수를 여러개로 사용할 때 오버로딩을 자주 사용한다. 그런데 오버로딩보다 더 효율적인 것이 있다면 어떨까? 그것이 바로 Generic의 T라는 것이다. 이에 대해서 아래에서 더 살펴보자
장점: Generic으로 사용한 코드에는 T가 들어가는데 T에는 타입이 들어가는데 int,string같은 타입이나 class의 타입 등 여러 가지가 들어갈 수가 있는데 그렇기 때문에 코드의 재사용이 아주 좋다.
void Start()
{
View(25);
View("Sparta");
}
public void View(int value)
{
Debug.Log(value);
}
public void View(string value)
{
Debug.Log(value);
}
// 제네릭을 이용하여 변환
void Start()
{
View<int>(25);
View<string>("Sparta");
}
public void View<T>(T value)
{
Debug.Log(value);
}
설명: 메서드를 사용할 때 매개변수를 다르게 하는 오버로딩을 사용을 하게 되는데 제네릭으로 설정을 하여
문제: Debug.log같은 경우에는 어떤 타입인지 상관없이 실행이 되지만 타입과 맞지 않는 코드를 사용 시에는 문제가 생기므로 예외처리나 변경에 따른 문제에 대해서 대비 해야한다.
// 제네릭으로 상속할 제네릭 클래스 생성
using UnityEngine;
public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
private static T instance;
public static T Instance
{
get
{
if (instance == null)
{
instance = (T)FindObjectOfType(typeof(T));
if (instance == null)
{
GameObject singletonObject = new GameObject();
instance = singletonObject.AddComponent<T>();
}
}
return _instance;
}
}
}
// 사용할 싱글톤의 상속
public class 타입: Singleton<타입>
설명: 지금까지 확인한 제네릭을 이용하여 싱글톤을 활용하는 코드이다.
상속으로 Instance를 받아서 사용가능하기 때문에 클래스마다 싱글톤을 만드는 번거로움을 해결 할 수 있다.
1. Generic: 여러 타입을 묶을 때 사용하게 된다.
1. 없음
1. 없음