목표

  • Generics 사용 방법에 대해 알아보자.

강철의 연금술사 실사판을 보았습니다. 한 3분정도?

Generics

  • 제니릭이란 .NET 2.0에 새롭게 추가된 개념으로, 형식 매개변수(type parameter)를 사용하는 것이다.
  • 형식 매개변수란 코드에서 클래스 또는 메서드를 선언하고 인스턴스화 할때까지 형식지정을 연기하는 개념을 말한다.
  • 따라서 generics을 사용하면 런타임 캐스팅 또는 boxing 작업에 대한 비용이나 위험이 발생하지 않고 공통 작업에 대한 클래스를 생성할 수 있다.

Generics 사용

  • Generics을 사용하여 특정 자료형을 저장하고, 반환하는 클래스를 제작해 보았다.
using UnityEngine;
using System.Collections;

public class GenericClass<T>
{
    T item;

    public void SetItem(T newItem)
    {
        item = newItem;
    }

    public T GetItem()
    {
        return item;
    }
}
  • GenericClassExample에서는 GenericClass는 int 혹은 string의 자료형을 저장, 반환 할 수 있다.
using UnityEngine;
using System.Collections;

public class GenericClassExample : MonoBehaviour
{
    void Start()
    {
        GenericClass<int> myInt = new GenericClass<int>();
        myInt.SetItem(10);
        Debug.Log("int item : " + myInt.GetItem());

        GenericClass<string> myString = new GenericClass<string>();
        myString.SetItem("item");
        Debug.Log("string item : " + myString.GetItem());
    }
}

여러개의 Generics 사용

  • 여러개의 Generics을 사용하는 방법은 아래와 같다.
using UnityEngine;
using System.Collections;

public class GenericClass<T, U> 
{
    T _itemT;
    U _itemU; 

    public void SetItem(T newItemT, U newItemU)
    {
        _itemT = newItemT;
        _itemU = newItemU;
    }

    public T GetItemT()
    {
        return _itemT;
    }

    public U GetItemU()
    {
        return _itemU;
    }
}
using UnityEngine;
using System.Collections;

public class GenericClassExample : MonoBehaviour
{
    void Start()
    {
        GenericClass<int, int> myInt = new GenericClass<int, int>();
        myInt.SetItem(10, 15);

        Debug.Log("int item : " + string.Format("{0}, {1}", myInt.GetItemT(), myInt.GetItemU()));

        GenericClass<string, float> myString = new GenericClass<string, float>();
        myString.SetItem("item", 1.0f);
        Debug.Log("string item : " + string.Format("{0}, {1}", myString.GetItemT(), myString.GetItemU()));
    }
}

Generics 제한

  • where 절을 사용하여, T의 형식을 제한할 수 있다.
조건설명
Where T : structT의 형식은 값(int, float..)이어야 한다. Null이 입력할 수 없다.
Where T : classT의 형식은 class여야 한다.
Where T : new()T의 형식은 파라미터없는 생성자가 있어야 한다.
Where T : [class name]T의 형식은 지정한 클래스 이거나, 이를 상속받는 class여야 한다.
Where T : [interface name]T의 형식은 인터페이스를 상속받는 class여야 한다.
Where T : UT의 형식은 U타입 이거나, U를 상속받는 class여야 한다. 

+ Recent posts