반응형
인터페이스란 무엇인가?
위키백과에서 인터페이스를 검색하면 다음과 같이 나온다.
"인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다." |
인터페이스는 우리가 흔히 잘 알고 있는 USB(하드웨어), GUI(사용자 인터페이스) 등이 있다. 이들은 모두 어떠한 기능을 유저가 쉽게 사용할 수 있도록 만들어 놓은 장치이다. 그렇다면 C# 문법에서 인터페이스는 어떻게 사용될까?
우선 인터페이스의 사용문법부터 알아보자. MS공식 문서에는 다음과 같이 적혀있다.
인터페이스를 구현하는 클래스 또는 구조체는 인터페이스에서 제공하는 기본 구현 없이 선언된 모든 멤버에 대한 구현을 제공해야 합니다. |
다시말해서 구현부에서 함수나 프로퍼티등의 멤버에 대한 정의를 강제하게되고, 이것을 통해 인터페이스와 상속받는 클래스간에 소통이 가능하게 된다.
어떻게 사용할 수 있는가?
기본적인 문법은 다음과 같다.
interface ITest<T>
{
bool IsTest(T value);
//public bool IsTest도 가능하지만 어짜피 모든 접근제한자가 public이므로 굳이 써줄 필요 없다.
}
인터페이스는 몇가지 규칙이 있다.
- 인터페이스를 구현하는 클래스 혹은 구조체는 해당 멤버를 모두 구현해야한다.
- 인터페이스는 직접 인스턴스화 될 수 없고 상속받은 클래스를 통해서만 인스턴스화 될 수 있다.
- 클래스 또는 구조체는 여러 인터페이스를 받을 수 있다.
- 인터페이스의 필드는 메서드, 프로퍼티, 인덱서, 이벤트등만 정의할 수 있다.
왜 사용하는가?
우선 인터페이스와 비슷한 역할을 하는 추상클래스와의 차이점을 알아야한다.
추상클래스는 클래스이기 때문에 다중상속이 불가능하다. 하지만 인터페이스는 다중상속이 가능하다는 장점이 있다.
그리고 전혀 관련 없는 클래스들에게 연결고리를 만들어준다(이름값하는 순간이다).
유니티에서 어떻게 사용할 수 있는가?
다음 소스코드를 보자.
//아이템 추가 인터페이스
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();
}
트리거에 진입하면 다음과 같은 로그가 뜬다. 이 로그는 위의 인터페이스를 상속받는 클래스라면 모두 뜨게된다.
반응형
'C# 프로그래밍 > 문법 개념' 카테고리의 다른 글
[C#] 반복기 메서드 (Iterator methods) (0) | 2022.05.16 |
---|---|
[C#] 다형성 (Polymorphism) (0) | 2022.05.08 |
[C#] 액션과 펑션 (Action & Func) (0) | 2022.05.05 |
[C#] 델리게이트 (Delegate) (0) | 2022.05.04 |
[C#] 직렬화 (Serialization) (0) | 2022.05.03 |