ScooTracer 프로젝트의 MVVM 패턴에 맞춘 폴더 구조와 각 폴더의 역할을 설명하는 가이드.
📁 ScooTracer
├── CONVENTION.md
├── Info.plist
├── README.md
├── STRUCTURE.md
├── 📁 ScooTracer
│ ├── AppDelegate.swift
│ ├── SceneDelegate.swift
│ ├── 📁 Base.lproj
│ ├── 📁 Extensions
│ │ ├── FaceNetExtensions.swift
│ │ ├── UIImageExtensions.swift
│ │ └── UIViewExtensions.swift
│ ├── 📁 Model
│ ├── 📁 Resources
│ │ ├── Assets.xcassets
│ │ └── 📁 Base.lproj
│ ├── 📁 Service
│ │ └── FaceNetService.swift
│ ├── 📁 Utils
│ ├── 📁 View
│ │ ├── CustomAlertViewController.swift
│ │ ├── 📁 Main
│ │ └── 📁 Sub
│ └── 📁 ViewModel
│ ├── CaptureLicenseViewModel.swift
│ ├── ComparisonViewModel.swift
│ ├── RidingViewModel.swift
│ └── SelfieCaptureViewModel.swift
├── 📁 ScooTracer.xcodeproj
│ ├── project.pbxproj
│ ├── 📁 project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ ├── 📁 xcshareddata
│ │ └── 📁 xcuserdata
│ ├── 📁 xcshareddata
│ │ └── 📁 xcschemes
│ └── 📁 xcuserdata
│ └── 📁 mobicom.xcuserdatad
└── 📁 facenet512.mlpackage
├── 📁 Data
│ └── 📁 com.apple.CoreML
└── Manifest.json
- 앱의 데이터 구조 정의
- 예시 파일:
User.swift
– 사용자 정보 모델 파일AuthSession.swift
– 인증 상태 관리 모델 파일
- UI와 관련된 모든 화면 구성 요소 포함
- ViewController: 각 화면의 뷰 컨트롤러 파일
- 예시:
AuthViewController.swift
,MainViewController.swift
- 예시:
- Custom Views: 재사용 가능한 커스텀 뷰 파일
- 예시:
FaceRecognitionView.swift
– 얼굴 인식 뷰
- 예시:
-
View와 Model 사이에서 데이터 가공 및 중개 역할 수행
-
View에서 데이터 요청을 받아 Model 데이터를 가공 후 View에 전달
-
예시 파일:
AuthViewModel.swift
– 인증 비즈니스 로직 처리FaceRecognitionViewModel.swift
– 얼굴 인식 결과 전달 로직
-
비즈니스 로직과 외부 API 연동, 데이터 처리 포함
-
예시 파일:
AuthService.swift
– 인증 관련 데이터 처리FaceRecognitionService.swift
– 얼굴 인식 API 호출 로직
- 이미지, 로컬화 파일, 폰트 등 리소스 관리
- Assets: 앱 아이콘 및 이미지 리소스 관리 (
Assets.xcassets
) - Localization: 다국어 지원
.strings
파일- 예시:
en.lproj
,ko.lproj
- 예시:
-
UIKit과 Swift 표준 라이브러리 확장 기능 관리
-
예시 파일:
UIView+Extensions.swift
– UIView 확장 메서드String+Extensions.swift
– String 확장 메서드
-
앱 전반에서 자주 사용하는 유틸리티 함수나 헬퍼 클래스 포함
-
예시 파일:
DateFormatterHelper.swift
– 날짜 형식 변환 헬퍼 함수ImageProcessor.swift
– 이미지 처리 및 변환 헬퍼
- 각 폴더의 역할에 맞는 파일을 추가하여 기능별로 분리
- ViewModel은 View와 Model 중개 역할만 수행하고, UI와 직접적인 상호작용 없음
- View는 UI와 관련된 작업에만 집중하고, 비즈니스 로직이나 데이터 처리 로직은 ViewModel에 위임
- Service에는 네트워크 호출이나 데이터베이스 액세스 같은 비즈니스 로직 포함하여 ViewModel이 직접 데이터 접근하지 않도록 함