본문 바로가기

C# 프로그래밍/문법 개념

[C#] 인터페이스 (Interface)

반응형

인터페이스란 무엇인가?

위키백과에서 인터페이스를 검색하면 다음과 같이 나온다.

   "인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다."

인터페이스는 우리가 흔히 잘 알고 있는 USB(하드웨어), GUI(사용자 인터페이스) 등이 있다. 이들은 모두 어떠한 기능을 유저가 쉽게 사용할 수 있도록 만들어 놓은 장치이다. 그렇다면 C# 문법에서 인터페이스는 어떻게 사용될까?

 

우선 인터페이스의 사용문법부터 알아보자. MS공식 문서에는 다음과 같이 적혀있다.

인터페이스를 구현하는 클래스 또는 구조체는 인터페이스에서 제공하는 기본 구현 없이 선언된 모든 멤버에 대한 구현을 제공해야 합니다.

다시말해서 구현부에서 함수나 프로퍼티등의 멤버에 대한 정의를 강제하게되고, 이것을 통해 인터페이스와 상속받는 클래스간에 소통이 가능하게 된다.


어떻게 사용할 수 있는가?

기본적인 문법은 다음과 같다.

interface ITest<T>
{
    bool IsTest(T value);
    //public bool IsTest도 가능하지만 어짜피 모든 접근제한자가 public이므로 굳이 써줄 필요 없다.
}

인터페이스는 몇가지 규칙이 있다.

  1. 인터페이스를 구현하는 클래스 혹은 구조체는 해당 멤버를 모두 구현해야한다.
  2. 인터페이스는 직접 인스턴스화 될 수 없고 상속받은 클래스를 통해서만 인스턴스화 될 수 있다.
  3. 클래스 또는 구조체는 여러 인터페이스를 받을 수 있다.
  4. 인터페이스의 필드는 메서드, 프로퍼티, 인덱서, 이벤트등만 정의할 수 있다.

왜 사용하는가?

우선 인터페이스와 비슷한 역할을 하는 추상클래스와의 차이점을 알아야한다.

추상클래스는 클래스이기 때문에 다중상속이 불가능하다. 하지만 인터페이스는 다중상속이 가능하다는 장점이 있다.

그리고 전혀 관련 없는 클래스들에게 연결고리를 만들어준다(이름값하는 순간이다). 


유니티에서 어떻게 사용할 수 있는가?

다음 소스코드를 보자.

//아이템 추가 인터페이스
public interface IDictionaryAddable
{
    public void AddToDictionary();
}

//추가하고자 하는 아이템 클래스에 인터페이스 상속
public class Item : MonoBehaviour, IDictionaryAddable
{
    public void AddToDictionary()
    {
        Debug.Log("Item Added");
    }
}

만약 

private void OnTriggerEnter(Collider other)
{
    if (other.TryGetComponent<IDictionaryAddable>(out IDictionaryAddable item))
        item.AddToDictionary();
}

 

트리거에 진입하면 다음과 같은 로그가 뜬다. 이 로그는 위의 인터페이스를 상속받는 클래스라면 모두 뜨게된다.

반응형