jshhhhh / Unity-2D-Roguelike

0 stars 0 forks source link

일반 함수(generic functions) #4

Open jshhhhh opened 2 years ago

jshhhhh commented 2 years ago

generic type

  • 보통 클래스나 인터페이스, 메서드를 사용할 때 동일한 기능을 수행하지만, 입력하는 데이터 형식만 틀린 경우
  • 파생 클래스에서 상속해서 추가적인 기능 추가 및 virtual 한정자가 달린 것을 재정의해서 사용 가능

image

generic functions

  • 매개변수의 타입을 미리 결정하지 않고, 사용시 결정
//일반형(Generic) 입력 T는 막혔을 때 컴포넌트 타입을 가리키기 위해 사용
//적: 상대->플레이어, 플레이어: 상대->벽
//where T : Component -> T는 컴포넌트 타입(제약조건)
protected virtual void AttemptMove<T>(int xDir, int yDir)
    where T : Component
{
    RaycastHit2D hit;
    //이동 성공: true, 실패: false 반환
    bool canMove = Move(xDir, yDir, out hit);

    //Move에서 부딪친 transform이 null인지 확인        
    if (hit.transform == null)
        //Move에서 라인캐스트가 다른 것과 부딪치지 않았다면 리턴 이후 코드를 실행하지 않음
        return;

    //무언가와 부딪쳤다면, 충돌한 오브젝트의 컴포넌트의 레퍼런스를 T타입의 컴포넌트에 할당
    T hitComponent = hit.transform.GetComponent<T>();

    //움직이던 오브젝트가 막혔고, 상호작용할 수 있는 오브젝트와 충돌함
    if (!canMove && hitComponent != null)
        OnCantMove(hitComponent);
}

참고 : https://coderzero.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-C-%EA%B0%95%EC%A2%8C-15-%EC%A0%9C%EB%84%A4%EB%A6%AD-Generics https://openwiki.kr/unity/genericfunctions

developerasun commented 2 years ago

타입스크립트에서 제네릭 이해하느라 애 좀 먹었는뎅.. 정적 언어인 Go, Ts, C# 은 다 런타임때 타입 할당하는 제네릭 개념이 꼭 들어가네유

developerasun commented 2 years ago

이거 코드 예시 한 번 보고 제네릭 작성하면 될 듯

static void Swap<T>(ref T input1, ref T input2)
{
    T temp = default(T);

    temp = input2;
    input2 = input1;
    input1 = temp;
}

static void Main(string[] args)
{
    int first = 4;
    int second = 5;

    Swap<int>(ref first, ref second);
}

reference