인터페이스는 상속과 비슷하면서도 다른 기능이다.
Java의 interface와 거의 비슷하다고 보면 된다.
보다보면 추상클래스인가? 이 느낌도 날 것이다.
알아보자
역시 정의부터 해보자.
인터페이스는 뜻을 해석해보면 알겠지만 상호간의 소통을 위한 매개체랄까 그런 것이다.
여기선 "인터페이스로 내가 정의한 것들을 너는 상속을 받아서 무조건 구현해야 한다. "는 그런 의무가 생긴다.
++ 인터페이스에 구현된 것을 상속 받은 자식클래스가 구현하지 않으면 오류가 생김
++ 추상클래스는 다중 상속이 안되지만 인터페이스는 다중 상속 가능
상속과 비슷하지만 다른 것이 무엇이냐?
바로 클래스 간의 관계가 다르다.
밑의 그림을 보면 쉽게 알 수 있다.
Implements는 여기서 구현이라고 생각하면 되겠다.
또한 interface는 네임 컨벤션, Name Convention이 있어 첫 글자를 대문자 I 로하는 것이 암묵적인 룰이다. 그 뒤에오는 문자 또한 대문자로 시작하게 한다.
**그래야 인터페이스로 I인지 진짜 I로 시작하는 메서드인지 구분한다.
또한 클래스 선언과 비슷해보이지만
인터페이스는 메서드, 이벤트, 프로퍼티 등만 가질 수 있다.
접근 제한자도 없어서. 무조건 public으로 선언된다.
++public 선언 안해도 인터페이스에서는 public으로 받아들인다.
++인스턴스 생성도 안된다.
인터페이스를 상속받아 이용하는데
상속받은 자식클래스는 반드시 인터페이스에 있는 모든 메서드를 구현해야 한다.
++이 메서드도 public 으로 선언되어야 한다.
**이것도 상속받은 거니까 재정의하려면 override를 선언해야하나????
-> 아니다. 인터페이스는 override를 선언할 필요가 없다. 그냥 정의하자.
**짧게 말하면 인터페이스에서는 구조, 형태를 만들고 실제 클래스에서 구현을 한다고 보면 된다.
예시를 보면서 이해하자
Interface
using UnityEngine;
using System.Collections;
//하나의 메서드를 인터페이스하는 것
public interface IKillable
{
void Kill();
}
//제너릭 인터페이스이다.
// T는 어떤 클래스가 받아서 실행하느냐에 따라 달렸다.
public interface IDamageable<T>
{
void Damage(T damageTaken);
}
Avartar
using UnityEngine;
using System.Collections;
public class Avatar : MonoBehaviour, IKillable, IDamageable<float>
//원래는 다중 상속이 안되지만 인터페이스로 바꿔서 다중 인터페이스하게 만들었다.
{
//구현하면 된다.
public void Kill()
{
//Do something fun
}
//타입이 정해졌으니 구현하면 된다.
public void Damage(float damageTaken)
{
//Do something fun
}
}
** 하나의 클래스가 여러 개의 클래스를 상속은 못받지만 인터페이스를 상속받는 것은 가능.
참고링크
'Game Development, 게임개발 > 개발' 카테고리의 다른 글
Extension Method, 확장 메서드 [Unity] (0) | 2021.03.29 |
---|---|
유니티에서 데이터 관리하는 법,How To Handle Data Between Scenes [Unity] (4) | 2021.03.28 |
Overriding, 덮어쓰기, 오버라이딩 [Unity] (0) | 2021.03.27 |
Member hiding, 하이딩, 은닉 [Unity] (0) | 2021.03.27 |
Script lifecycle, 이벤트 함수의 실행 순서 [Unity] (0) | 2021.03.27 |