Unity C# 인터페이스 초보자 가이드
C#의 인터페이스는 클래스가 구현해야 하는 메서드, 속성 및 이벤트 집합을 정의하는 계약입니다. 이는 여러 클래스에서 기능을 구현하기 위한 청사진 역할을 합니다. 인터페이스는 다형성을 달성하는 방법을 제공하여 다양한 클래스가 공통 동작을 공유할 수 있도록 합니다.
Unity C# 인터페이스
Unity에서 인터페이스를 사용하려면 다음 단계를 따르세요.
- 새 스크립트를 만들고 이름을 지정합니다(제 경우에는 InterfaceContainer로 이름 지정하겠습니다).
- 그 안의 모든 항목을 제거한 후 아래 코드를 붙여넣습니다.
public interface IEntity
{
void Initialize(); //Function without any arguments
float health { get; set; } //A variable
void ApplyDamage(float points); //Function with one argument
}
인터페이스 이름은 IEntity입니다(참고: 처음에 대문자 i는 필요하지 않지만 편의를 위해 모든 인터페이스 이름을 'I'로 지정합니다. 시작하면 클래스가 언제 인터페이스를 사용하는지 알 수 있습니다.)
C# 스크립트에서 인터페이스를 사용하려면 다음 단계를 따르세요.
- 새 스크립트를 만들고 이름을 지정합니다. (제 경우에는 EntityScript로 이름을 지정하겠습니다)
- MonoBehaviour 뒤에 인터페이스 이름을 추가합니다. 이 경우 IEntity입니다(쉼표로 구분).
public class EntityScript : MonoBehaviour, IEntity
인터페이스 메소드가 구현되지 않았기 때문에 스크립트에서 오류가 발생하는 것을 알 수 있습니다. 이제 IEntity 메소드를 구현해 보겠습니다.
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity
{
public float health { get; set; }
public void Initialize()
{
health = 100;
}
public void ApplyDamage(float points)
{
health -= points;
}
}
이제 인터페이스 메소드가 구현되었습니다.
인터페이스는 프로그래밍 작업 흐름을 어떻게 단순화합니까?
C# 인터페이스의 가장 큰 장점은 여러 클래스에서 사용할 수 있으므로 각 스크립트에 대해 GetComponent를 호출하는 대신 인터페이스 이름을 사용하여 모든 스크립트 참조를 가져올 수 있다는 것입니다.
둘 이상의 스크립트에서 동일한 메서드를 구현해야 하거나 동일한 컨텍스트에서 알 수 없는 클래스를 참조해야 하는 경우 C# 인터페이스를 사용합니다.
아래 예를 확인하세요.
//Get the script that uses IEntity interface
IEntity interfaceEntity = gameObject.GetComponent<IEntity>();
interfaceEntity.Initialize(); //Initializing the entity
interfaceEntity.ApplyDamage(10); //Applying the damage
interfaceEntity.health += 10; //Healing the entity
위의 스크립트는 IEntity 인터페이스가 있는 구성 요소를 가져온 다음 해당 메서드를 호출합니다.
보너스
인터페이스는 다음과 같은 사용자 정의 데이터 유형을 허용할 수도 있습니다.
public interface IHealable<T>
{
void Heal(T type);
}
그런 다음 클래스에서 인터페이스를 구현할 때 데이터 유형이 제공됩니다(float 또는 int과 같은 표준 유형이거나 Class 또는 다른 유형과 같은 더 복잡한 유형일 수 있음). 상호 작용):
using UnityEngine;
public class EntityScript : MonoBehaviour, IEntity, IHealable<int>
{
public float health { get; set; }
public void Initialize()
{
//health = 100;
Heal(100);
}
public void ApplyDamage(float points)
{
health -= points;
}
public void Heal(int points)
{
health = points;
}
}