오늘은 인터페이스 위주로 알려드리겠습니다.
인터페이스 정의는 **“어떤 클래스가 반드시 가져야 하는 함수(기능)를 약속만 해두는 것”
즉, 내용(로직)은 없고, 형태(함수 이름/매개변수)만 정의하는 것.
인터페이스 정의란?
✔ 1) 함수의 '기본 틀'만 미리 정해둔 것
예:public interface IDamagable
{
void TakePhysicalDamage(float amount);
}
“나를 맞출 수 있는 객체들은 반드시 TakePhysicalDamage() 함수를 구현해야 한다”
라는 규칙(약속)을 정의하는 것.
이거는 IDamagable입니다. 이걸 인터페이스로 만들어서 damage관련을 상속받게 만들어줍니다.
✔ 2) 상속받는 클래스들이 실제 기능을 구현한다
public class Player : MonoBehaviour, IDamagable
{
public void TakePhysicalDamage(float amount)
{
// 플레이어가 데미지 받는 실제 로직
}
}
public class Monster : MonoBehaviour, IDamagable
{
public void TakePhysicalDamage(float amount)
{
// 몬스터가 데미지 받는 실제 로직
}
}
➡ 각 클래스는 같은 이름의 함수를 구현하지만, 동작은 다르게 짤 수 있음
✔ 3) 인터페이스를 쓰는 이유
공격자가 “저 대상이 플레이어인지 몬스터인지” 몰라도 됨
그냥 IDamagable 있으면 데미지 주기 가능
if (hit.TryGetComponent(out IDamagable target))
{
target.TakePhysicalDamage(damage);
}
➡ 코드가 엄청 깔끔해짐
➡ 서로 다른 객체들이 동일한 방식으로 상호작용 가능
정리
인터페이스 정의 = “특정 기능을 반드시 구현하라는 약속을 적어놓은 것”
내용 없음
형태만 있음
누가 상속받든 그 기능을 만들어야 함
객체 타입을 몰라도 공통된 기능 호출 가능