BurningTimesAi/프로젝트/코어프레임워크/02_수상한잡화점_추출대상_v1.md

11 KiB

수상한 잡화점 — NerdNavis.Framework 추출 대상 선별

🟢 2026-04-17 완료 실적 아카이브 — Tier 1 16/16 반영 종료

본 문서는 수상한 잡화점 소스에서 코어 프레임워크로 추출할 대상을 식별한 원 가이드로, Tier 1 기반 Core 4종 + Attribute 3종 + Util 6종 + Event 2종 + Container 3종 + Data 5종 = 총 19 파일·16 모듈 구현 완료 시점(2026-04-17)에 "완료 실적" 성격으로 전환됨. 각 추출 항목은 아래 본문에서 구현 위치 역참조로 연결됨 (📦 표기). 구현 상세는 코어코드/NerdNavis.Framework/CHANGELOG.md 참조.

차기 프로젝트에서 Tier 2(Addressable·UGUI·Security)·Tier 3(Network) 추가 추출 시 본 문서 구조(A/B/C/D 등급 분류·변형 포인트·네이밍 규칙)를 재사용 가능 (헌법 제1원칙 목표 2 원칙 A).

작성일: 2026-04-14 상위 문서: 01_아키텍처_개요_v1.md 목적: 수상한 잡화점 Unity 프로젝트 코드에서 신규 코어로 편입할 범용 패턴 식별·분류 원칙: 코드·구조 참고는 가능, 네이밍은 재작성 필수 (PD님 확정) 주의: 수상한 잡화점 프로젝트에는 이 코어를 적용하지 않음. 추출은 다음 프로젝트에서 사용할 코어용.


1. 등급 분류

등급 의미 조치
A. 즉시 추출 범용성 높음 + 의존성 최소 코어에 바로 재작성 편입
B. 프레임워크 래핑 패턴은 범용, 단순화·제네릭화 필요 구조 참고 + 재설계
C. 선별 추출 게임 로직과 범용 로직 혼재 범용 메서드만 분리 흡수
D. 도메인 잔류 프로젝트 특수 개념 다수 코어 편입 제외, 프로젝트에 남김

2. 분류표 (13+개 대상 파일)

A. 즉시 추출 (6개)

# 원본 줄 수 신규 위치 변형 포인트 구현 상태
1 My/MyCoroutine.cs 52 NerdNavis.Core.Coroutine.CoroutineRunner 기존 NerdNavisCore CoroutineHandler와 통합, 일시정지·재시작·중복방지 1종 API 2026-04-16 — 📦 Runtime/Core/Coroutine/CoroutineRunner.cs
2 My/CryptoUtil.cs 86 NerdNavis.Security.CryptoUtil (Tier 3 합류 시점) AES 키 하드코딩 제거 필수, ICryptoProvider 인터페이스 뒷받침, 키 주입 방식 ⏸ Tier 3 대기
3 Addressable/AddrHandleBase.cs 102 NerdNavis.Addressable.AddressableHandle<T> (Tier 2) 참조 카운팅·Preload/Unload 정책 부가 ⏸ Tier 2 대기
4 Addressable/AddressableReleaseSelf.cs 8 NerdNavis.Addressable.AutoReleaseComponent (Tier 2) OnDestroy 훅 재작성, 주석처리 코드 제거 ⏸ Tier 2 대기
5 UGUI/Util/SafeArea.cs 17 NerdNavis.UI.Components.SafeAreaBorder 기존 UIToolkit 버전과 병존, UGUI RectTransform 대응 ⏸ Tier 2(UI) 대기
6 Manager/ErrorLogHookManager.cs 42 NerdNavis.Core.Util.Log 내부 훅 Log 카테고리·필터와 통합, #if FGB_LIVE 같은 프로젝트 플래그 제거 2026-04-16 — 📦 Runtime/Core/Log/ 통합

B. 프레임워크 래핑 (2개)

# 원본 줄 수 신규 위치 변형 포인트 구현 상태
7 Template/MonoBehaviourSingletonTemplate.cs 30 NerdNavis.Core.Patterns.MonoSingleton<T> 4종 싱글톤(Sync/Async/Ready/Inner) 통합 (01문서 4-1 참조). MonoBehaviourSingletonuScrollViewMgr<T> 같은 변종 제거 2026-04-16 — 📦 Runtime/Core/Patterns/MonoSingleton.cs + ServiceLocator.cs
8 UGUI/BackKey/BackKeyAdd.cs 67 NerdNavis.UI.UGUI.BackKeyHandler BackKeyMgr 싱글톤 의존을 구독 패턴으로 재설계, 스택 기반 백키 처리 ⏸ Tier 2(UI) 대기

🆕 2026-04-17 Tier 1 확장 구현 (본 원 가이드 범위 외 추가 추출)

Tier 1 완결을 위해 원 가이드에 없던 모듈 9종을 추가 설계·구현. 수상한잡화점 소스 역추적이 아닌 차기 프로젝트 범용성을 목적으로 한 신규 설계 (C11 범용성 원칙).

범주 모듈 구현 위치 근거 설계
Attribute 3종 ReadOnlyAttribute·ShowIfAttribute·ArrayTitleAttribute 📦 Runtime/Core/Attribute/ 인스펙터 UX 공통 패턴
Util 6종 EnumToInt(#12 일반화)·EnumEx·FormatEx·MathEx·KeyMaker·ValidationEx(#9 일반화) 📦 Runtime/Core/Util/ 박싱 회피 Unsafe.As<,>, : 구분자 표준, 순수 BCL
Event 2종 EventBus·Raw/RawEventBus 📦 Runtime/Core/Event/ 04_Tier1_3종_상호작용_설계_v1.md §3
Container 3종 ObservableList·ObservableDictionary·ObservableQueue 📦 Runtime/Core/Container/ 기존 UniList·UniEventList·UniObserverList 3종 통합 대체, 세분화 이벤트
Data 5종 IDataRow·DataTable·DataTableSO·DataTableLoader·DataTableLoadedEvent 📦 Runtime/Core/Data/ 기존 MasterTableBase 재설계, 제네릭 키, RFC 4180 최소 CSV + JsonUtility

테스트: NUnit 기반 총 19+ 파일 (Tests/Runtime/Core/{Attribute,Util,Event,Container,Data}/*Tests.cs).

C. 선별 추출 (4개 — 범용 메서드만 취함)

9. My/DSUtil.cs (1,406줄)

프로젝트 강결합(게임 테이블 참조, ObscuredTypes 의존, 게임 stage 로직)이 상당함. 범용 메서드만 흡수.

추출 후보 메서드 신규 위치 비고
CheckNull, Get_Clone, Format NerdNavis.Core.Util.ValidationEx / ObjectEx / FormatEx
StringToEnum<T> NerdNavis.Core.Util.EnumEx 캐시 적용
LogError 변종 NerdNavis.Core.Util.Log 중앙 로거로 통합
제외 GetStageInfo, ActorInfo류, 테이블 조회 수상한 잡화점 전용, 프로젝트 잔류

10. UGUI/Manager/uScrollViewMgr.cs + uScrollViewArrMgr.cs (합 116줄)

  • 추출: 무한 스크롤 프레임워크 뼈대 (Set_ScrollView<T>, ScrollTo)
  • 제거: CardBase, DSUtil 의존, 프로젝트 특화 ClickCard/Select_Card
  • 신규 위치: NerdNavis.UI.UGUI.InfiniteScrollView<T>
  • 변형: 제네릭 데이터 바인딩 인터페이스(IScrollItem<T>)로 재설계

11. UGUI/Manager/UIAtlasMgr.cs (29줄)

  • 추출: Set(), Get_Sprite() 스프라이트 아틀라스 관리
  • 제거: Get_EquipmentGrade_Sprite(), Get_CardGrade_Sprite() (게임 특수)
  • 신규 위치: NerdNavis.UI.UGUI.SpriteAtlasRegistry

12. My/MyEnumToInt.cs (51줄)

  • 추출: Enum → Int 캐싱 패턴 (박싱 회피)
  • 신규 위치: NerdNavis.Core.Util.EnumToInt<T>
  • 변형: MyEnum 구체 의존 제거, 제네릭 타입 파라미터로 일반화

D. 도메인 잔류 (추출 제외, 프로젝트에 남김)

원본 사유
My/MyEnum.cs (463줄) 23개 enum 전부 수상한 잡화점 특수 (eStageNodeType, eStat, eStatusConditionsType 등). C11 오염, 코어 편입 금지
My/MyValue.cs (802줄) 게임 테이블·스테이지 데이터 강결합. 프로젝트 설정값 모음
My/MyText.cs eStat/eElement 로컬라이제이션 — 게임 특수
UGUI/Common/GameUI.cs EffectMgr/MyValue 강결합, 게임 이펙트 로직
UGUI/Common/ControlUI.cs eControlUi 게임 특수 enum
UGUI/Common/ScenarioUI.cs (43KB) 시나리오 이벤트 시스템, 프로젝트 특화
UGUI/Common/TouchBlockUI.cs (재확인 필요 — 범용성 검토 후 추출 여부 재판정)

3. 추출 시 공통 정리 원칙

3-1. 네이밍 규칙

  • My* 접두사 전면 제거 (MyCoroutineCoroutineRunner)
  • u* 소문자 시작 접두사 제거 (uScrollViewMgrInfiniteScrollView)
  • Mgr, _Mgr 축약 → 풀 네임 (MgrManager, 단 통용 시 유지 가능)
  • _ 구분자 제거, PascalCase 준수 (Set_CoroutineSetCoroutine)
  • Regist* 오탈자 → Register*
  • 기존 FilGoodBandits 네임스페이스 모두 → NerdNavis.* 로 재작성

3-2. 의존성 단절

  • 수상한 잡화점 전용 enum/class 참조 전부 제거
  • ObscuredInt / ObscuredLong (ACTk) 참조는 선택 레이어로 재설계 (INumericProtection)
  • 테이블 조회(table_*) 참조 제거, 데이터 추상 인터페이스(IDataTable)로 대체

3-3. 변형 방향

  • 싱글톤 감소: 필요 최소 외에는 순수 클래스 + DI 패턴 친화로
  • 이벤트 기반 통신: EventBus 적극 활용, 강결합 매니저 참조 회피
  • 제네릭 우선: UIAtlasMgr처럼 특정 도메인 하드코딩된 메서드는 제네릭 팩토리로 재설계

4. 추출 우선순위 (Tier 1 구현 순서 제안)

순번 추출 대상 Tier 이유
1 MyCoroutine → CoroutineRunner 1 다른 모듈이 의존하는 기반
2 MonoBehaviourSingletonTemplate → MonoSingleton 1 전반적으로 쓰임
3 DSUtil 일부 → ValidationEx/ObjectEx/FormatEx/EnumEx 1 유틸 기반
4 MyEnumToInt → EnumToInt 1 성능 유틸
5 SafeArea (UGUI 버전) → SafeAreaBorder 1 UGUI 주력 방침 반영
6 UIAtlasMgr → SpriteAtlasRegistry 1 UGUI 기본 인프라
7 ErrorLogHookManager → Log 훅 통합 1 로깅 인프라
8 BackKeyAdd → BackKeyHandler 1 UGUI 주력 관련
9 uScrollView → InfiniteScrollView 1 복잡도 중간
10 AddrHandleBase → AddressableHandle 2 Addressable 모듈
11 CryptoUtil → CryptoUtil (+ICryptoProvider) 3 서버팀 합류 시점

5. 추출 후 수상한 잡화점 자체 정리 (별도 과제)

수상한 잡화점 프로젝트는 새 코어를 적용하지 않지만, 추출 과정에서 드러난 오염은 기록해 둠.

발견된 C11 관점 문제 (수상한 잡화점 내부)

  • 네임스페이스 부재: 대부분 global namespace (SafeArea.cs만 FilGoodBandits) → 장기 리팩토링 대상 (우선순위 낮음, 기능에는 영향 없음)
  • My*, u* 접두사 혼재: 일관성 부족
  • 매니저 싱글톤 과다: uScrollViewMgr, UIAtlasMgr, BackKeyMgr, EffectMgr, ProjectileMgr 등 → 결합도 높음
  • DSUtil 거대화(1,406줄): 유틸과 게임 로직이 혼재 → 장기 분해 대상

이 문제들은 이번 프로젝트에서 손대지 않음 (개발 중단 리스크). 추출 과정에서만 반영.

6. 다음 작업

# 작업 선행 조건
1 PD님과 NAS Git 저장소 위치·접근 방식 협의 없음, 즉시 가능
2 패키지 스켈레톤 생성 (package.json, asmdef, 폴더 틀) 저장소 위치 확정
3 Tier 1 구현 시작 (위 4절 순번 1번부터) 스켈레톤 완료
4 수상한 잡화점 개발 준비 (Phase 0-B/C) 재개 Tier 1·2 진행 중 병행 가능 여부는 PD님 판단