성장하고 싶은 나는 샤워하거나 씻을때 유튜브 Unity korea 에서 제공하는 디자인패턴에 관한 TIP들을 보는데, 옵저버 패턴이란 내용이 나와서 블로그에 정리해보기로 했다.
옵저버 패턴이란 ?
한 객체의 상태가 변경될때, 이를 의존하는 다른 객체들에게 자동으로 알림을 보내는 패턴입니다.
(게임개발에서는 이벤트 시스템 혹은 UI업데이트에 주로 사용됩니다.)
한번 예시코드를 작성해 보도록 하겠습니다.
코드의 흐름을 이렇게 이해하면 쉽게 이해할 수 있습니다.
이벤트를 등록 > 이벤트를 구독(메서드) > 이벤트를 발생 > 이벤트를 구독하는 메서드를 호출
public class Player : MonoBehaviour
{
// 이벤트를 등록
public static event Action<int> OnHealthChanged;
private int health = 100;
//TakeDamage(int damage)메서드가 호출되면 health에 damage를 주고 이벤트를 발생시킴
public void TakeDamage(int damage)
{
health -= damage;
// 체력 변경 시 이벤트 발생
OnHealthChanged?.Invoke(health)
}
}
// UI클래스
public class HealthUI : MonoBehaviour
{
// 게임 오브젝트가 활성화될 때 이벤트 구독
void OnEnable()
{
Player.OnHealthChanged += UpdateHealth;
}
// 게임 오브젝트가 비활성화될 때 이벤트 구독 해제
void OnDisable()
{
Player.OnHealthChanged -= UpdateHealth;
}
// 플레이어의 체력이 변경될 때 호출되는 메서드
void UpdateHealth(int currentHealth)
{
// 체력 정보를 UI에 표시 (환경에 맞는 코드로 변경)
Debug.Log($"Player Health: {currentHealth}");
}
}
끗!