클래스는 부모 클래스를 두 개 이상 상속받을 수 없다.

    오직 하나의 부모 클래스로부터 상속이 가능하다.

    그래서 나온 게 인터페이스다.

     

    인터페이스 interface
    // 인터페이스 생성, 클래스처럼 뼈대를 제공하지만 다중 상속이 가능하게 함.
    interface Jeju
    {
    	void A();
    }
    
    public class A : MonoBehaviour
    {
    
    }
    
    // 다중 상속
    public class Test : A, Jeju {
    
    }

    인터페이스는 클래스처럼 뼈대를 제공한다.

    하지만 클래스와 달리 다중 상속을 받게 해줄 수 있다.

    대신 인터페이스에선 선언만 해야 되고 변수를 넣을 수는 없다.

     

    인터페이스끼리 서로 상속도 가능하다.

    이건 클래스랑 같다.

     

     

    형식 매개 변수 T

    같은 함수인데 매개변수(파라미터)만 다른 함수를 여러 개 생성해놓을 수 있다.

    그렇게 만들어 놓은 뒤 함수를 호출할 때 파라미터를 넣으면 자료형에 따라 함수가 호출된다.

    그런데 이렇게 자료형별로 만들면 굉장히 비효율적이다.

    이럴 때 형식 매개 변수를 이용한다.

    // 형식 매개 변수가 없다면 자료형별로 함수를 만들어줘야 한다.
    void Print(int value)
    {
    	print(value);
    }
    
    void Print(string value)
    {
    	print(value);
    }
    
    void Print(float value)
    {
    	print(value);
    }
    
    // 형식 매개변수를 이용한다면 소괄호에 T를 넣어준다. 아무거나 넣어줘도 되는데 관례상 Type의 약자 T를 넣는다.
    void Print<T>(T value)
    {
    	print(value);
    }
    
    // 형식 매개변수 사용법은 소괄호 안에 타입을 넣어주면 된다.
    Print<string>("abc");

    이런식으로 형식을 나중에 입력하게 만들어줄 수 있다.

     

    또한 형식매개변수를 만든 뒤 특정 타입만 넣도록 해줄 수도 있다.

    // 특정 자료형만 넣도록 where T 뒤에 타입을 작성해준다.
    void Print<T>(T value) where T : class
    {
    	Print(value);
    }

    이렇게 클래스, int 등 타입만 넣도록 만들어줄 수 있다.

     

    함수 뿐 아니라 클래스에도 형식 매개변수를 쓸 수 있다.

    // 클래스에 형식 매개변수 T 적용
    public class Abc<T>
    {
    	public T var;
        public T[] array;
    }
    
    // 사용하기
    Abc<String> a;
    
    void Start()
    {
    	a.var = "가나다";
        a.array[0] = "가";
    }

    이런 식이다.

     

     

    ※ 함께 읽으면 좋은 C# 기초

     

    C# 프로퍼티 속성, 인덱서 클릭!

    C# 클래스 상속 클릭!

    C# 구조체 델리게이트 클릭!

    C# 컬렉션 리스트, 큐, 스택, 해시테이블, 딕셔너리, arraylist 클릭!

    C# 배열 선언, 사용법 클릭!

     

    C# 조건문, 반복문 클릭!

    C# 연산자, ++ 사용법 클릭!

    C# 전역변수, 지역변수, 접근 지정자 클릭!

    C# 함수 정의와 호출 클릭!

    C# 기본 자료형 클릭!

     

    C# print, 주석, 변수 클릭!

    'IT > 코딩' 카테고리의 다른 글

    C# 코루틴, 전처리  (0) 2021.12.19
    C# 무명 메소드, 람다식, Action, Func, 예외 처리  (0) 2021.12.18
    C# 프로퍼티 속성, 인덱서  (0) 2021.12.16
    C# 클래스 상속  (0) 2021.12.15
    C# 구조체 델리게이트  (0) 2021.12.14