게임 매니저와 같은 싱글톤 클래스에서 모든 이벤트를 관리하는 방식은 초기에 유용하지만, 게임이 커짐에 따라 사소한 이벤트까지 게임 매니저가 처리하게 되어 코드가 비대해지고 복잡해지기 시작합니다. 이런 상황에서는 이벤트를 분리하여 관리하는 방식이 필요합니다.
이벤트 관리 방식의 문제점
게임 매니저가 모든 이벤트를 관리하다 보면, 게임 로직과 UI 관련 코드가 혼합되어 유지보수가 어려워집니다. 또한, 이벤트가 늘어나면서 게임 매니저가 점점 비대해지고, 단일 책임 원칙에 어긋나게 됩니다. 예를 들어, 보너스 점수 증가, UI 업데이트, 플레이어 상태 변화 등 모든 이벤트를 게임 매니저가 관리하게 되면, 게임의 확장성에 한계를 가져오게 됩니다.
이벤트 전담 클래스를 도입한 해결책
이벤트 전담 클래스를 도입하면, 게임 매니저는 더 이상 모든 이벤트를 관리할 필요가 없고, 이벤트가 발생했을 때 처리하는 클래스들로 나누어 관리할 수 있습니다. 이때 중요한 점은 이벤트 전담 클래스는 static으로 만들면 됩니다. 게임 매니저는 단순히 이벤트를 관리하고, 다른 클래스는 실제 이벤트를 처리하는 방식으로 분리하는 것입니다.
실제 예시
PlayerEventManager : 플레이어와 관련된 이벤트(예: 점수 증가, 플레이어 상태 변화 등)를 처리.
UIEventManager : UI 관련 이벤트(예: 버튼 클릭, 화면 애니메이션 등)를 처리.
GameStateEventManager : 게임 상태와 관련된 이벤트(예: 게임 시작, 게임 종료 등)를 처리.
이벤트 클래스 구조 예시
// Player와 관련된 이벤트를 처리하는 클래스
public class PlayerEventManager
{
public static event Action OnScoreIncreased;
public static void IncreaseScore()
{
// 점수 증가 이벤트 발생
OnScoreIncreased?.Invoke();
}
}
// UI와 관련된 이벤트를 처리하는 클래스
public class UIEventManager
{
public static event Action OnGameOver;
public static void TriggerGameOver()
{
// 게임 오버 이벤트 발생
OnGameOver?.Invoke();
}
}
// 게임 상태와 관련된 이벤트를 처리하는 클래스
public class GameStateEventManager
{
public static event Action OnGameStarted;
public static void StartGame()
{
// 게임 시작 이벤트 발생
OnGameStarted?.Invoke();
}
}
이벤트 클래스 사용 예시
// GameManager에서 이벤트를 구독하고 처리
public class GameManager : MonoBehaviour
{
void OnEnable()
{
PlayerEventManager.OnScoreIncreased += HandleScoreIncreased;
UIEventManager.OnGameOver += HandleGameOver;
GameStateEventManager.OnGameStarted += HandleGameStarted;
}
void OnDisable()
{
PlayerEventManager.OnScoreIncreased -= HandleScoreIncreased;
UIEventManager.OnGameOver -= HandleGameOver;
GameStateEventManager.OnGameStarted -= HandleGameStarted;
}
private void HandleScoreIncreased()
{
Debug.Log("Score Increased");
}
private void HandleGameOver()
{
Debug.Log("Game Over");
}
private void HandleGameStarted()
{
Debug.Log("Game Started");
}
}
마무리
이벤트를 게임 매니저가 처리하는 방식은 초기에는 괜찮지만, 게임의 규모가 커지면서 복잡도가 증가하는 문제를 일으킬 수 있습니다. 이벤트 전담 클래스를 도입하여 이벤트 처리 책임을 분리하면, 유지보수성과 확장성이 좋아지고, 게임 매니저의 복잡도가 줄어듭니다. static 이벤트 클래스를 활용하여, 이벤트 관리를 간단하고 효율적으로 처리할 수 있습니다.
게임 매니저는 더 이상 모든 이벤트를 처리하지 않고, 각 이벤트 관리 클래스가 책임을 지도록 하여 게임의 유연성을 높일 수 있습니다.
'C#' 카테고리의 다른 글
Dictionary 를 배열처럼 접근할 때 주의사항 (0) | 2025.05.02 |
---|---|
Parsing과 TryParse() 계열 함수들 (0) | 2025.04.30 |
Unity 에서 Singleton 클래스에 Instance로 접근하는 이유 (0) | 2025.04.30 |
속성은 컴파일 단계에서 변수를 자동 생성합니다 (0) | 2025.04.28 |
병합 할당 연산자(??=) 이해하기 (0) | 2025.04.28 |