인터페이스 실제 사용했을때의 이점
2024. 10. 31. 13:00ㆍ카테고리 없음
인터페이스 사용의 이점
인터페이스는 여러 클래스에서 공통적인 기능을 정의해둘 수 있는 강력한 도구이다. 인터페이스의 특정 기능만 필요할 때, 인터페이스 타입을 통해 클래스의 세부 구현에 의존하지 않고 기능만 호출할 수 있다.
쉽게 말해, 인터페이스가 선언되지 않은 다른 클래스에서도 인터페이스에 선언된 함수만을 손쉽게 사용할 수 있는 방법이다.
코드
인터페이스 선언
public interface IDamagalbe
{
void TakePhysicalDamage(int damage);
}
클래스에서 인터페이스를 선언하지 않고 사용
public class CampFire : MonoBehaviour
{
public int damage;
public float damageRate;
List<IDamagalbe> things = new List<IDamagalbe>();
void Start()
{
//얼만큼의 데미지텀을 줄것인지 결정하는 곳
InvokeRepeating("DealDamage", 0, damageRate);
}
void DealDamage()
{
for (int i = 0; i < things.Count; i++)
{
things[i].TakePhysicalDamage(damage); //불에 닿으면 데미지 주는 곳
}
}
private void OnTriggerEnter(Collider other)
{
if (other.TryGetComponent(out IDamagalbe damagalbe))
{
things.Add(damagalbe);
}
}
private void OnTriggerExit(Collider other)
{
if (other.TryGetComponent(out IDamagalbe damagalbe))
{
things.Remove(damagalbe);
}
}
}
코드 설명
CampFire 클래스는 IDamagalbe를 사용해 불에 닿은 모든 객체에 데미지를 줍니다. 이때 IDamagalbe를 구현하지 않은 객체라면 리스트에 추가되지 않기 때문에 안전하게 데미지 기능만 호출할 수 있습니다.
더 자세히 말하자면
out IDamagalbe damagalbe 을 사용한 이유는 해당 컴퍼넌트에 IDamagalbe이 있으면 그 해당 인터페이스에 관한 내용을 damagalbe에 저장을 하고 리스트에 추가를 한다. 이떄 damagalbe에 들어가있는 정보는 부딪친 컴퍼넌트에 IDamagalbe이 있으면 그 스크립트안에 있는 TakePhysicalDamage(int damage); 함수를 가져올 수 있는거다.