한 줄 요약
interface: 해당 인터페이스를 구현하는 클래스에서 반드시 구현해야 하는 멤버들을 정의한 계약
I(인터페이스 이름)의 구조를 가짐public interface IObservable<T>
{
/// <summary>
/// Dictionary의 내용이 변경될 때 발생하는 이벤트입니다.
/// </summary>
event Action<T> AnyValueChanged;
void Invoke();
}
IObservable을 상속받는 클래스에서 구현해야할 이벤트와 함수를 명시하고 있으며, 해당 클래스에서 위 요소를 구현하지 않을 경우 컴파일 되지 않음public class EffectDictionary : ObservableDictionary<int, BaseEffect>, IObservable<EffectDictionary>
{
public event Action<EffectDictionary> AnyValueChanged = delegate { };
public override void Invoke() => AnyValueChanged(this);
}
위와 같이 인터페이스를 구현하여야 컴파일이 가능하고, 해당 기능을 사용할 수 있음
인터페이스의 장점은 클래스에 해당 요소의 구현을 강요하므로, 인터페이스로 접근하여도 해당 인터페이스를 상속받는 객체가 반드시 인터페이스의 요소를 갖고 있음을 명확하게 할 수 있음
(외부 클래스)
{
IObservable<int> observable;
observable.Invoke();
}