# ๐ Gyro Data ํ๋ก์ ํธ ## ๐ ๋ชฉ์ฐจ - [๐ฉโ๐ป ํ๋ก์ ํธ ๋ฐ ๊ฐ๋ฐ์ ์๊ฐ๐จโ๐ป](#-ํ๋ก์ ํธ-๋ฐ-๊ฐ๋ฐ์-์๊ฐ) - [โ๏ธ ๊ฐ๋ฐํ๊ฒฝ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ](#-๊ฐ๋ฐํ๊ฒฝ-๋ฐ-๋ผ์ด๋ธ๋ฌ๋ฆฌ) - [๐ฆ ํ๋ก์ ํธ ๋ก๊ณ ](#-Gyro-Data-ํ๋ก์ ํธ-๋ก๊ณ ) - [โ๏ธ ํต์ฌ ํค์๋](#-ํค์๋) - [๐ฑ ๊ตฌํ ํ๋ฉด](#-๊ตฌํ-ํ๋ฉด) - [๐ฉ๐ปโ ์ฝ๋ ์ค๋ช ](#-์ฝ๋-์ค๋ช ) - [๐ ํด๋ ๊ตฌ์กฐ](#-ํด๋-๊ตฌ์กฐ) - [โก๏ธ ํธ๋ฌ๋ธ ์ํ ](#%EF%B8%8F-ํธ๋ฌ๋ธ-์ํ ) - [๐ ์ฐธ๊ณ ๋งํฌ](#-์ฐธ๊ณ -๋งํฌ) <br> ## ํ๋ก์ ํธ ๋ฐ ๊ฐ๋ฐ์ ์๊ฐ > **์๊ฐ** : 6์ถ ๋ฐ์ดํฐ(acc 3์ถ + gyro 3์ถ)๋ฅผ ๋ค๋ค๋ณด๊ณ , ๋ฐ์ดํฐ๋ฅผ ์์ฑํ์ฌ CoreData์ jsonํ์ผ๋ก ์ ์ฅํ๊ณ , ๋ถ๋ฌ์ค๋ ์ฑ์ ๋๋ค.<br>**ํ๋ก์ ํธ ๊ธฐ๊ฐ** : 2022.12.26 ~ 2022.12.30<br> | **[์๋ (Ellen)](https://github.com/jcrescent61)** | **[์ธ์ฒด์ธ(Unchain)](https://github.com/unchain123)** | **[์ํค(Yeton)](https://github.com/yeeton37)** | |:---:|:---:|:---:| |<img src="https://i.imgur.com/s7IBwC1.jpg" width="270" height="250"/>|<img src="https://i.imgur.com/I4RtOVg.png" width="270" height="250"/>|<img src="https://i.imgur.com/5cHjgY4.jpg" width="270" height="250"/>| ### ์๋ (Ellen) - MVVM ์ํคํ ์ฒ ๊ตฌ์กฐ ์ค๊ณ - ์ธก์ ๋ฐ ํ๋ ์ด ๋ก์ง ๊ตฌํ - AnalysisView ์ธก์ ํ๋ฉด ๊ตฌํ ### ์ธ์ฒด์ธ(unchain) - ๊ทธ๋ํ๋ทฐ ๊ตฌํ - SwiftUI์ UIKit ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ - ๋ฉ์ธํ๋ฉด ๊ตฌํ ### ์ํค(Yeton) - ์ฝ์ด๋ฐ์ดํฐ ๊ตฌํ - ํ์ผ๋งค๋์ ๊ตฌํ - PlayView ๊ตฌํ <br> ## ๊ฐ๋ฐํ๊ฒฝ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ []() []() [](https://firebase.google.com/products/firestore?hl=ko) []() <br> ## ๐ฆ Gyro Data ํ๋ก์ ํธ ๋ก๊ณ <img src="https://i.imgur.com/drLuvoF.png" width="270" height="250"/> ## ๐ก ํค์๋ - **`Combine`** - **`FileManager`** - **`SwiftUI`** - **`Charts(SwiftUI)`** - **`CoreData`** - **`MVVM`** - **`UITableView`** - **`GraphView`** - **`DataFormatting`** - **`SwiftUI + Combine`** - **`UIKit`** <br> ## ๐ฑ ๊ตฌํ ํ๋ฉด |**๋ฉ์ธ ํ๋ฉด** | **์ธก์ ํ๋ฉด** | | -------- | -------- | ||  | <br> | Play ํ๋ฉด | View ํ๋ฉด | | -------- | -------- | |  |  | <br> **FileManager ์ ์ฅ** - ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ค์ฃผ๋ ๋ชจ๋ธ์ ์ ์ฅ - file url ๊ฒฝ๋ก๋ฅผ ํ๊ณ ๋ค์ด๊ฐ๋ฉด ์๋์ ๊ฐ์ ํ์ผ์ด ์์ฑ๋์ด ์์  **CoreData ์ ์ฅ** - ํ ์ด๋ธ ๋ทฐ ์ ์ ๊ทธ๋ ค์ฃผ๋ ๋ชจ๋ธ์ CoreData์ ์ ์ฅ <br> ## ๐ฉ๐ปโ๐ป ์ฝ๋ ์ค๋ช <details> <summary> CoreData </summary> - `GraphFileManager` : File์ json ๋ฐ์ดํฐ ํํ๋ก ๊ทธ๋ํ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ FileManager Manager - `CoreDataManager` : CoreData์ key value ํํ๋ก ์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ CoreData Manager <br> </details> <br> <details> <summary> Model </summary> - `CellModel` : Cell์ ๋ณด์ฌ์ง๋ ๋ชจ๋ธ ํ์ - `GraphModel` : Graph์ ๋ณด์ฌ์ง๋ ๋ชจ๋ธ ํ์ - `AnalysisType` : Acc์ Gyro ํ์ ์ ์ ํํ ์ ์๋ enum </details> <br> <details> <summary> Manager </summary> - `AnalysisManager` : ์ธก์ ์ ์์ํ๊ณ ์ข ๋ฃํ๋ ๋ฉ์๋๋ฅผ ๊ด๋ฆฌํ๋ ํ์ </details> <br> <details> <summary> Domain </summary> - `GraphRecordViewModel`: ๊ทธ๋ํ์ ๊ด๋ จ๋ ๋ชจ๋ธ์ ์ ๋ฌ๋ฐ์ ๋ทฐ์ปจํธ๋กค๋ฌ์ ์ ๋ฌํด์ฃผ๋ ๋ทฐ ๋ชจ๋ธ - `GraphRecordViewController`: ์ผ๋ฐ View์ Play View๋ฅผ ์กฐ๊ฑด์ ๋ง๊ฒ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ - `AnalyzeListViewController`: ์ฒซ ๋ฒ์งธ ํ๋ฉด, ์ธก์ ์ด ์๋ฃ๋๋ฉด ๊ธฐ๋ก๋๋ ํ ์ด๋ธ ๋ทฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ทฐ ์ปจํธ๋กค๋ฌ - `AnalyzeListViewModel`: ์ ์ ๋ณด์ฌ์ค ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ๋ ๋ทฐ ๋ชจ๋ธ - `AnalysisTableViewCell`: ํ ์ด๋ธ ๋ทฐ์ ๋ณด์ฌ์ง ์คํ ๋ ์ด์์๊ณผ ์์๋ค์ ์ค์ ํ ์ - `HostingViewController`: SwiftUI์ ๋ทฐ์ UIKit์ ์ฝ๋๋ฅผ ์ฐ๊ฒฐํด์ฃผ๊ธฐ ์ํด ์์ฑํ ๋ทฐ ์ปจํธ๋กค๋ฌ - `AnalyzeViewController`: ์ธก์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ทธ๋ํ๊ฐ ์ค์๊ฐ์ผ๋ก ์ธก์ ๋์ด ๊ทธ๋ ค์ง๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ทฐ ์ปจํธ๋กค๋ฌ - `AnalyzeViewModel`: ์ธก์ ๋ ๊ฐ์ ์ฝ์ด๋ฐ์ดํฐ์ ์ ์ฅํ๋ ๋ทฐ ๋ชจ๋ธ </details> <br> <details> <summary> Extension </summary> - `UIColor+`: ์์ฃผ ์ฌ์ฉ๋๋ ์์ ์ง์ ํ ์ ์๋๋ก ํ์ฅ - `UIView+` : ๋ทฐ์ปจํธ๋กค๋ฌ์ ๋ทฐ๋ฅผ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ํ์ฅ - `Date+`: DateFormatter๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ง ํ์ ๊ธฐ๋ฅ ํ์ฅ </details> <br> <details> <summary> SupportFile </summary> - `GyroData`: CoreData์ ์กด์ฌํ๋ Entity ํ์ </details> <br> ## ๐ ํด๋ ๊ตฌ์กฐ ``` . โโโ AppDelegate.swift โโโ CoreData โย ย โโโ CoreDataManager.swift โย ย โโโ GraphFileManager.swift โโโ Domain โย ย โโโ Analyze โย ย โย ย โโโ AnalyzeViewController.swift โย ย โย ย โโโ AnalyzeViewModel.swift โย ย โย ย โโโ HostingViewController.swift โย ย โโโ GraphView.swift โย ย โโโ Record โย ย โย ย โโโ GraphRecordView.swift โย ย โย ย โโโ GraphRecordViewModel.swift โย ย โโโ TableView โย ย โโโ AnalyzeListViewController.swift โย ย โโโ AnalyzeListViewModel.swift โย ย โโโ Cell โย ย โโโ AnalysisTableViewCell.swift โโโ Extension โย ย โโโ UIColor+.swift โย ย โโโ UIDate+.swift โย ย โโโ UIView+.swift โโโ Manager โย ย โโโ AnalysisManager.swift โโโ Model โย ย โโโ AnalysisType.swift โโโ SceneDelegate.swift โโโ SupportFile โย ย โโโ Assets.xcassets โย ย โย ย โโโ AccentColor.colorset โย ย โย ย โย ย โโโ Contents.json โย ย โย ย โโโ AppIcon.appiconset โย ย โย ย โย ย โโโ Contents.json โย ย โย ย โโโ Contents.json โย ย โโโ Base.lproj โย ย โย ย โโโ LaunchScreen.storyboard โย ย โโโ GyroData.xcdatamodeld โย ย โย ย โโโ GyroData.xcdatamodel โย ย โย ย โโโ contents โย ย โโโ Info.plist โโโ ios-wanted-GyroData.txt ``` ## โก๏ธ ํธ๋ฌ๋ธ ์ํ ### 1. UIKit๊ณผ SwiftUI์ Charts์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ ์ฒ์ ๊ณผ์ ๋ฅผ ๋ฐ๊ณ ์ฐจํธ๋ฅผ ๊ทธ๋ฆฌ๋ ค๊ณ ํ ๋ ์ฌํด **WWDC**์์ ๋ณด์๋ **SwiftUI Charts**๊ฐ ์๊ฐ์ด ๋ฌ์ต๋๋ค. iOS16์์ ์ฌ์ฉํ ์ ์๋ ์ ๊ธฐ์ ์ด๊ธฐ๋ ํด์ ํ๋ฒ ์ ์ฉํด๋ณด๊ณ ์ถ์ ๋ง์์ SwiftUIView๋ฅผ ๊ทธ๋ ค์ **UIHostingViewcontroller**๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉํ์ต๋๋ค. charts๋ฅผ ์ฌ์ฉํ์ฌ ๋ง๋ ๊ทธ๋ํ๋ทฐ์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ก ๋ฐ์์ด ๋์ง์๋ ํธ๋ฌ๋ธ์ด ์ผ์ด๋ฌ์ต๋๋ค. ์ปด๋ฐ์ธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ด ์ ๋์๊ฑฐ๋ผ๊ณ ํ๋จ์ ํ์์ง๋ง ๊ทธ๊ฒ์ UIKit์ ๊ด์ ์์๋ ๋น์ฐํ์ง๋ง SwiftUIView๋ ํ๋กํผํฐ๋ ํผ๋ก ๋ฐ์ธ๋ฉ๋ ๋ฐ์ดํฐ์๋ง ๋ทฐ๋ฅผ ์๋ก ๊ทธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํ์ต๋๋ค. ์ฒ์์๋ ObservableObject๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ธ๋ฉ์ ์๋ ํ์๋๋ฐ ์ด๋ค ์ด์ ์์ ์ง ๋ฐ์ธ๋ฉ์ด ์ ๋์ง ์์๊ณ Environmentobject๋ฅผ ํ์ฉํ๊ธฐ๋ก ํ์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ์ ์ ๋ฌ์ ObservableObject๋ฅผ ์ด์ฉ ํ์ง๋ง ๋ชจ๋ ๋ทฐ๊ฐ ๋์ผ ํ ๋ชจ๋ธ์ ๊ฐ๋ฆฌํค๊ณ ๋ฐ์ดํฐ์ ๋ณํ์ ์ฆ์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. **Environmentobject**์ ์ฅ์ ์ด ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ์ด๋ค ๋ถ๋ถ์ด๋ ๋๊ธฐํ๋ฅผ ๋ณด์ฅ ํ๋ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ### 2. ๋จ๋ฐฉํฅ ๊ตฌ์กฐ์ MVVM ์ค๊ณ <img src="https://i.imgur.com/3kUJ679.png" width="600"/> ๋ฐ์ดํฐ ํ๋ฆ์ ์ค์ง **๋จ๋ฐฉํฅ**์ผ๋ก ํ๋ฅด๊ฒ ๊ตฌํํ์ต๋๋ค. ๋ฐ์ดํฐ ํ๋ฆ์ด ๋จ์ํ์ฌ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์ด๋ ๋ฆฌํฉํ ๋ง์ ์ฉ์ดํฉ๋๋ค. ๋ํ Swift์ **ํ๋กํ ์ฝ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์**์ ์ฑํํ์ฌ ViewModel์ Input ์๊ทธ๋๊ณผ Output ์๊ทธ๋ ๋ชจ๋๋ฅผ Protocol์ ์ฌ์ฉํ์ฌ ์ธํฐํ์ด์คํ ํ์ต๋๋ค. <br> ### 3. Model ํ์ ์ ๋ํ ๊ณ ๋ฏผ ์ฒ์ Model์ ๊ตฌ์ํ์์ ๋์๋ Model ๋ด๋ถ ํ๋กํผํฐ์ ํ์ ์ ์๋์ ๊ฐ์ด Core Data์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ํ์ ์ด ์๋ ์ปค์คํ ํ ํ์ ์ด ์กด์ฌํ์ต๋๋ค. ```swift struct GyroDataModel: Codable { let id: UUID let analysisType: AnalysisType let savedAt: [Date] let measurementTime: Double } ``` ์ปค์คํ ํ ํ์ ์ธ `AnalysisType, [Date]` ๋ฑ์ **Core Data**์ ๋ฃ์ด์ฃผ๊ณ ์ ํ์ผ๋ ์ด๋ฏธ ๋ง๋ค์ด์ง entity์ ํ์ผ์ ์์ ํ๋ ๊ฒ์ ์ด๋ ค์์ ๊ฒช์์ต๋๋ค. ๊ทธ๋์ `์์ดํฐ ์ฑ๋ง๋ค ์กด์ฌํ๋ ๊ณต๊ฐ์ ๊ด๋ฆฌํ๋ ๋งค๋์ `์ธ **FileManager**๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ถ๊ฐํ์์ต๋๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก **CoreData**๋ `์ ์ ๋ณด์ฌ์ง๋ ๊ธฐ๋ณธ์ ์ธ ํ์ ์ ์ ์ฅ`ํ๋ ๋ฐ ์ฌ์ฉํ๊ณ , **FileManager**๋ `์์ดํฐ ์ฑ ๋ด๋ถ ๊ฒฝ๋ก์ json ํํ๋ก ์ปค์คํ ํ ํ์ ์ ์ ์ฅ`ํ ๋ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ง ๋ฐฉ์์ ๋ชจ๋ ์ฑํํ์์ต๋๋ค. ## ๐ ์ฐธ๊ณ ๋งํฌ - [FileManager](https://leeari95.tistory.com/32) - [FileManager](https://developer.apple.com/documentation/foundation/filemanager) - [Combine](https://developer.apple.com/documentation/combine) - [Charts](https://developer.apple.com/documentation/charts/creating-a-chart-using-swift-charts) - [environmentobject๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ](https://www.hackingwithswift.com/quick-start/swiftui/whats-the-difference-between-observedobject-state-and-environmentobject)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up