Company
교육 철학

Settings (설정 시스템)

Settings (설정 시스템)

관련 소스 파일

GameFramework/Base/GameFrameworkException.cs
GameFramework/Setting/ISettingHelper.cs
GameFramework/Setting/ISettingManager.cs
GameFramework/Setting/SettingManager.cs

소개

Settings 시스템은 게임 세션 간에 지속적으로 유지되어야 하는 사용자 환경 설정 및 게임 설정을 관리합니다.
Configuration 시스템이 보통 사전에 정의된 데이터에서 로드되는 정적 게임 설정을 관리하는 반면, Settings 시스템플레이 중에 수정 가능하며 세션 간 보존되어야 하는 사용자별 설정을 다룹니다.

시스템 아키텍처

Settings 시스템은 GameFramework의 다른 모듈과 일관된 매니저-헬퍼 아키텍처 패턴을 따릅니다.
SettingManager
설정을 관리하는 API와 기능을 제공
ISettingHelper 인터페이스 구현체
실제 저장 및 불러오기 작업 담당 (플랫폼별로 다를 수 있음)
즉, SettingManager는 GameFrameworkModule을 상속하고 ISettingManager 인터페이스를 구현하며, 실제 저장/로드 작업은 ISettingHelper 구현체에 위임합니다.

핵심 구성 요소

SettingManager

중앙 관리 클래스
ISettingManager를 구현하고 GameFrameworkModule을 상속
프레임워크의 모듈 시스템을 통해 접근 가능
주요 특징:
헬퍼 인터페이스를 통해 설정 관리
다양한 데이터 타입 읽기/쓰기 메서드 제공
설정 존재 여부 확인 지원
프레임워크 종료 시 자동 저장 수행

ISettingHelper

플랫폼별로 구현해야 하는 인터페이스.
책임:
영구 저장소에서 설정 로드
영구 저장소로 설정 저장
메모리 내 설정 컬렉션 관리
데이터 타입 변환
객체 직렬화/역직렬화

데이터 흐름과 동작

게임 로직은 SettingManager를 통해 설정에 접근합니다.
SettingManagerISettingHelper 구현체에 실제 저장/불러오기 작업을 위임합니다.

지원 데이터 타입

데이터 타입
Get 메서드
Set 메서드
Boolean
GetBool(name), GetBool(name, defaultValue)
SetBool(name, value)
Integer
GetInt(name), GetInt(name, defaultValue)
SetInt(name, value)
Float
GetFloat(name), GetFloat(name, defaultValue)
SetFloat(name, value)
String
GetString(name), GetString(name, defaultValue)
SetString(name, value)
Object
GetObject(name), GetObject(name, defaultObj) …
SetObject(name, obj), SetObject(name, obj)
※ 존재하지 않는 설정에 대비해 기본값을 지정할 수 있는 오버로드 메서드 제공.

주요 동작

초기화 및 설정

Settings 시스템을 사용하기 전 준비 단계:
1.
플랫폼에 맞는 ISettingHelper 구현체 생성
2.
SettingManager.SetSettingHelper()로 헬퍼 설정
3.
Load()를 호출하여 기존 설정 로드

읽기와 쓰기

// 읽기 bool enableMusic = settingManager.GetBool("EnableMusic", true); // 기본값 true int volume = settingManager.GetInt("Volume", 50); // 기본값 50 float sensitivity = settingManager.GetFloat("Sensitivity"); // 없으면 예외 발생 string playerName = settingManager.GetString("PlayerName", ""); // 기본값 "" PlayerConfig config = settingManager.GetObject<PlayerConfig>("PlayerConfig"); // 쓰기 settingManager.SetBool("EnableMusic", false); settingManager.SetInt("Volume", 75); settingManager.SetFloat("Sensitivity", 0.85f); settingManager.SetString("PlayerName", "Player1"); settingManager.SetObject("PlayerConfig", playerConfig);
C#
복사

관리 기능

// 존재 여부 확인 bool hasVolume = settingManager.HasSetting("Volume"); // 특정 설정 삭제 settingManager.RemoveSetting("TemporarySetting"); // 모든 설정 삭제 settingManager.RemoveAllSettings(); // 모든 설정 이름 조회 string[] allSettings = settingManager.GetAllSettingNames();
C#
복사

설정 저장 및 로드

// 로드 bool loadSuccess = settingManager.Load(); // 저장 bool saveSuccess = settingManager.Save();
C#
복사
※ 프레임워크 종료 시 자동 저장됩니다.

구현 시 고려사항

ISettingHelper 구현 시 주의할 점:
저장 방식: Unity는 PlayerPrefs, 웹은 localStorage, Windows는 레지스트리/파일 등 플랫폼 적합한 방식 선택
데이터 직렬화: 복잡한 객체 저장 시 직렬화/역직렬화 필요
성능: 자주 쓰이는 설정은 빠르게 접근 가능하도록 최적화
에러 처리: 불러오기/저장 실패에 대비한 예외 처리
스레드 안정성: 멀티스레드 접근 가능 시 동기화 필요
요약하자면, Settings 시스템은 사용자 맞춤형 데이터를 세션 간 보존하기 위한 모듈이며,
플랫폼에 맞는 ISettingHelper를 구현해 SettingManager와 연결하면 손쉽게 확장할 수 있는 구조입니다.