개발/C#
[C#] 인터페이스(Interface)
남생이야
2024. 5. 14. 00:59
인터페이스는 추상 클래스와는 다르게 구현을 포함할 수 없다. 즉, 어느 멤버라도 함수에 대한 정의를 할 수는 없고 이름 명시만 할 수 있게 된다.
더불어서, 인터페이스는 다중 상속을 허용한다. 인터페이스는 개발자에게 앞으로의 기능을 구현할 것이라는 '가능성'을 알려주기 위해 사용한다.
인터페이스가 가질 수 있는 것은
상수
추상 프로퍼티
추상 메소드
위와 같은 값만 가질 수 있으며, 인터페이스의 멤버는 기본적으로 public이다.
public interface IDamagable
{
void Damage(GameObject attacker, IWeapon causer, float power);
}
데미지를 받을 수 있는 객체들에게 붙일 인터페이스를 정의한다.
아래 코드는 EnemyBT 클래스에 IDamagable 인터페이스를 상속 받고 인터페이스의 멤버 함수(메소드)인 Damage 함수를 정의하여 사용하고 있다.
public partial class EnemyBT : MonoBehaviour, IDamagable
{
public void Damage(GameObject attacker, IWeapon causer, float power)
{
status.Damage(power);
if (status.Dead == false)
{
animator.SetTrigger("Damaged");
// 이미 대상이 있으면 갱신하지않는다.
// TODO: 도발에 대한 개념이 추가되면 여기 수정
if (target == null)
{
// 나를 공격한 녀석을 바로 타겟으로 잡는다.
Debug.Log("Somebody Hittd me");
target = attacker;
}
return;
}
animator.SetTrigger("Dead");
Collider collider = GetComponent<Collider>();
collider.enabled = false;
GameManager.Instance.monsterCount--;
Destroy(this.gameObject, 5.0f);
}
}
위와 같은 데미지를 입을 수 있는 객체를 참조하기 위하여 상속받아 정의된 클래스만을 참조하는게 아닌
IDamagable damagable = other.GetComponent<IDamagable>();
위와 같은 코드로 인터페이스에 접근하여 판단을 내릴 수 있다.