반응형
인터페이스란?
- 외부와 통신하는 공개 통로, 통로의 규격
- 통로의 규격은 강제하지만, 내부에서 어떤 일이 일어날지를 결정하지는 않음.
인터페이스의 특징
- 관례적으로 이름 앞에 I를 붙여 선언
- 인터페이스를 상속하는 클래스는 해당 인터페이스의 메서드를 반드시 구현해야함.
- 인터페이스를 상속하는 클래스는 해당 인터페이스의 메서드를 반드시 public으로 선언해야함.
- 세부적인 타입과 구체적인 구현을 따지지 않고 동작
- 느슨한 커플링(Loose Coupling) : 어떤 코드가 특정 클래스의 구현에 결합되지 않아 유연하게 변경 가능한 상태
예시
public interface IItem
{
void Use(GameObject target);
}
public class HpPotion : MonoBehaviour, IItem
{
public int amount = 100;
public void Use(GameObject target)
{
Debug.Log($"{amount}만큼 hp 회복!");
}
}
public class MpPotion : MonoBehaviour, IItem
{
public int amount = 100;
public void Use(GameObject target)
{
Debug.Log($"{amount}만큼 mp 회복!");
}
}
// 인터페이스 미사용 예시
OnTriggerEnter(Collider other)(
{
HpPotion hp = other.GetComponent<HpPotion>();
if(hp != null)
hp.Use();
MpPotion mp = other.GetComponent<MpPotion>();
if(mp != null)
mp.Use();
}
// 인터페이스를 사용한 경우
OnTriggerEnter(Collider other)(
{
IItem item = other.GetComponent<IItem>();
if(item != null)
item.Use();
}