06. Core
이 문서의 목표
Framework의 진입점, 로깅, 메시징, 스케줄링, Tick 등 핵심 계약을 이해한다.
왜 필요한가
Core는 모든 System이 공통으로 의존하는 기반이다. 로깅/틱/메시지버스가 System마다 제각각이면 Diagnostics 연동, Release 빌드 최적화가 불가능해진다.
언제 사용하는가
- 로그를 남길 때: 반드시
Log(Debug.Log 직접 호출 금지) - 매 프레임 갱신이 필요할 때:
TickSystem.Register - Feature 간 이벤트 통신:
MessageBus.Publish/Subscribe - 지연 실행:
Scheduler.Delay/Scheduler.Repeat
프로젝트에서 어떤 역할인가
BuildMode: Editor/Development/Release 분기의 단일 기준 (Application.isEditor등 직접 사용 금지)Result/Optional: 예상 가능한 실패를 예외 대신 값으로 반환
실제 게임에서는 언제 호출되는가
RootBootstrap.Initialize() 시점에 TickSystem/MessageBus 등이 연결되고, 이후 게임 전체 수명 동안 사용된다.
코드 예제
Log.Info("플레이어 스폰 완료");
TickSystem.Register(myTickable);
_messageBus.Publish(new PlayerDiedMessage());
var result = await _save.SaveAsync("slot1", data);
if (!result.IsSuccess) Log.Error(result.Error);
관련 Sample
Samples/Core/CoreSample.cs
Best Practice
Info/Warning은 Development 전용,Error/Exception만 모든 빌드에 남긴다.- 비용이 큰 로그 인자는
IsDevelopment조건으로 감싼다. - Feature 내부 이벤트에는 MessagePipe(MessageBus)를 쓰지 않는다 (Feature 간 이벤트에만 사용).
자주 하는 실수
Debug.Log직접 호출 (Editor 전용 스크립트 제외 금지)Time.deltaTime직접 사용 (ITimeSystem.DeltaTime사용해야 함, 17_TimeSystem.md 참고)- 예외를 흐름 제어 수단으로 사용
실습 과제
Log.Info로 로그를 남기고 Release 빌드에서 제거되는지 확인한다.- 간단한 Message 구조체를 정의해
MessageBus.Publish/Subscribe로 통신해본다.
이전 문서 / 다음 문서
이전: 05_Common.md 다음: 07_Patterns.md
관련 API
MCP_Index.md Core 섹션 전체