본문 바로가기
Study/Unity

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

by 스테디코디스트 2024. 2. 1.
반응형
인터페이스란?
- 외부와 통신하는 공개 통로, 통로의 규격
- 통로의 규격은 강제하지만, 내부에서 어떤 일이 일어날지를 결정하지는 않음.

 

 

인터페이스의 특징
- 관례적으로 이름 앞에 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();       
}