본문 바로가기
카테고리 없음

[코딩일기] C# 인터페이스

by mania2321 2024. 6. 29.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// [인터페이스]
// 하나만 상속받을 수 있는 클래스와는 달리, 다중 상속 가능
// 뼈대(골격) 제공
// 추상 메소드 같은 경우, 재정의 할 때 override를 사용하지만 인터페이스를 정의할 땐 override를 사용하지 않는다. 
// class 같은 경우에는 변수를 선언할 수 있지만(그래서 인터페이스에서 해당 변수 가져다가 쓸 수 있음), 인터페이스에서는 변수를 선언할 수 없다. 
// 함수, 프로퍼티, 인덱서, 이벤트 이렇게 4가지만 정의할 수 있다.

abstract public class  A : MonoBehaviour        // 추상 클래스1
{
    abstract public void Abc();             // 추상 메소드. 추상 메소드 와 추상 클래스는 항상 함께 사용하여야 한다.
}

//abstract public class B : MonoBehaviour        // 추상 클래스2
//{
//    abstract public void Bbc();             
//}

interface ITest         // 인터페이스는 명칭에 항상 'I'를 붙여줌으로써 구분한다.
{
    // 뼈대 제공, 다중 상속
    void Bbc();

    // 함수 프로퍼티, 인덱서, 이벤트의 큰 틀만 제공(값 대입 X)
    int SalaryP {  get; set; }
}

interface ITest2 : ITest        // 인터페이스끼리 상속. ITest2가 ITest를 상속받음.
                                // 이렇게 하면 ITest2만 상속받으면 ITest까지 모두 상속받는 효과를 볼 수 있다.
{

}


public class Test : A, ITest           // 추상 클래스 A를 상속받음(Test 클래스 == 자식 클래스, A 클래스 == 부모 클래스) >>> 추상 클래스는 여러 개 상속 받지 못한다. 클래스는 반드시 하나만 상속받을 수 있다.
                                // 부모 클래스에서 미완성된 추상 클래스를 자식 클래스에서 완성시켜야 된다. 
                                // Test 우클릭, [빠른 클릭 및 리펙터링] -> 추상 클래스 구현
{
    public int SalaryP { get => throw new System.NotImplementedException(); set => throw new System.NotImplementedException(); }

    public override void Abc()          // 여기에다가 Abc 함수에 여러가지 기능들을 구현할 수 있다.
    {
        throw new System.NotImplementedException();
    }

    public void Bbc()
    {
        print("Bbc");
    }
}

댓글