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 개발 프로세스 개선

  • 협업 용이성 : 여러 개발자가 독립적으로 작업 가능
  • 코드 리뷰 효율 : 변경 사항을 시스템별로 명확하게 구분
  • 문서화 개선 : 각 시스템의 책임과 기능이 명확히 구분됨