상위 클래스에서 필요한 모든 기능을 제공해주고 하위클래스는 상위클래스하고만 커플링되며 필요한 부분만 구현한다.
이는 유니티의 기본적인 프레임워크에 사용된다.
유니티의 게임오브젝트는 Monobehavior를 상속받는데 여기에 많은 기능들이 이미 제공된다.
또한 라이프 사이클 또한 정의되어있기 때문에 하위클래스에서 순서를 변경할 수 없다.
따라서 정해진 순서를 유지할 수 있다.
또한 확장에도 아주 유리하다.
UI를 예로 들면
using UnityEngine;
public abstract class UIPanelBase : MonoBehaviour
{
public void Open()
{
gameObject.SetActive(true);
OnOpen(); // 사용자 정의 확장 포인트
}
public void Close()
{
OnClose(); // 사용자 정의 확장 포인트
gameObject.SetActive(false);
}
protected virtual void OnOpen() { }
protected virtual void OnClose() { }
}
이렇게 base코드를 만들고
public class InventoryPanel : UIPanelBase
{
protected override void OnOpen()
{
Debug.Log("인벤토리 열림");
// 아이템 목록 초기화
}
protected override void OnClose()
{
Debug.Log("인벤토리 닫힘");
// 저장 처리 등
}
}
하위클래스에서 이렇게 추가적으로 정의할 수 있다.
그리고
inventoryPanel.Open()
inventoryPanel.Close()
로 사용하면 된다.
이는 다른 패널을 만들어도 똑같이 Open, Close로 사용이 가능하다.