1. 소개
- 단일 클래스에 모든 데이터 관리 로직이 집중된 구조를 어떻게 체계적으로 분리하고 개선했는지 공유하고자 합니다.
2. 리팩토링 배경
기존 문제점
- UserDataManager 클래스에 모든 데잍터 관리 로직이 집중됨
- 코드 가독성과 유지보수성 저하
- 새로운 시스템 추가 시 복잡도 증가
- 단일 책임 원칙 위반
개선 목표
- 각 시스템별 데이터 관리 로직 분리
- 확장 가능한 구조 설계
- 코드 재사용성 향상
- 테스트 용이성 확보
3. 시스템 구조
전체 시스템 구조도
데이터 저장 흐름
데이터 로드 흐름
4. 세부 구현
BaseDataManager
public abstract class BaseDataManager
{
protected DatabaseReference DatabaseRef { get; private set; }
protected string UserId { get; private set; }
public virtual void Init(DatabaseReference databaseRef, string userId)
{
DatabaseRef = databaseRef;
UserId = userId;
}
public abstract Task SaveDataAsync();
public abstract Task LoadDataAsync();
public abstract void Clear();
}
BaseDataManager는 모든 데이터 매니저의 기본 클래스로, 공통 기능을 제공합니다
- Firebase 데이터베이스 참조 관리
- 사용자 ID 관리
- 기본 인터페이스 정의
UserDataManager (파사드)
- 각 시스템별 데이터 매니저 초기화 및 관리
- 전체 데이터 저장/로드 작업 조율
- 자동 저장 시스템 관리
- 네트워크 상태 처리
5. 장점과 이점
5.1 구조적 이점
- 단일 책임 원칙 준수 : 각 매니저는 하나의 시스템만 담당
- 확장성 : 새로운 시스템 추가가 용이
- 유지보수성 : 각 시스템들을 독립적으로 수정 가능
5.2 기술적 이점
- 병렬 처리 : 데이터 저장/로드를 병렬로 처리
- 에러 격리 : 한 시스템의 오류가 다른 시스템에 영향을 주지 않음
- 메모리 효율 : 필요한 데이터만 메모리에 로드
- 캐시 최적화 : 각 시스템별로 최적화된 캐싱 전략 적용 가능
5.3 개발 프로세스 개선
- 협업 용이성 : 여러 개발자가 독립적으로 작업 가능
- 코드 리뷰 효율 : 변경 사항을 시스템별로 명확하게 구분
- 문서화 개선 : 각 시스템의 책임과 기능이 명확히 구분됨