현재 앱 구조는 아래와 같다. 이번 변경 목표는 다음과 같다.
├── Taster
│ ├── Preview Content
│ │ └── PreviewContainer.swift
│ ├── Resource
│ └── Source
│ ├── Model
│ │ ├── Local
│ │ └── SwiftData
│ ├── Observable
│ ├── Utility
│ └── View
│ ├── Component
│ │ ├── Alert
│ │ ├── Button
│ │ ├── Confetti
│ │ ├── RadarChart
│ │ └── Rating
│ ├── Note
│ │ ├── AddNote
│ │ │ ├── AddCocktailNote
│ │ │ ├── AddCoffeeNote
│ │ │ ├── AddWhiskeyNote
│ │ │ └── AddWineNote
│ │ ├── CocktailNote
│ │ ├── CoffeeNote
│ │ ├── WhiskeyNote
│ │ └── WineNote
│ ├── Onboarding
│ └── User
└── Taster.xcodeproj
변경 목표
- Observable 제거하기
- Model 에 비즈니스 로직 넣기 (Model 이 일을 하게하자)
- Utility 보다는 모듈 개념으로 구분하기
- 앱 UI 기본 컴포넌트로 적용하기 → 고도화는 적용 후에!
- 중복되는 뷰 최대한 재활용하기
앱 구조 확인과정
모델 변경
아래와 같이 Wine, Coffee, Cocktail, Whiskey 의 데이터가 너무 전역적으로 let 으로 선언되어 있고, 흩어져 있는 데이터라는 느낌이 들어서 묶어야 할 필요성을 느꼈다!! 이것을 어떻게 변경할 수 있을까?
struct WineType: Identifiable, Codable, Hashable {
var id = UUID()
var name: String
var imageName: String
}
let wineTypes: [WineType] = [
WineType(name: "스파클링 와인", imageName: "sparklingWine"),
WineType(name: "화이트 와인", imageName: "whiteWine"),
WineType(name: "레드 와인", imageName: "redWine")
// ... 생략
]
struct WineColor: Identifiable, Codable, Hashable {
var id = UUID()
var name: String
var imageName: String
}
let wineColors: [WineColor] = [
WineColor(name: "밀짚색", imageName: "strawWine"),
WineColor(name: "노란색", imageName: "yellowWine"),
WineColor(name: "황금색", imageName: "goldWine")
// ... 생략
]
struct WineScent: Identifiable, Codable, Hashable, Equatable {
var id = UUID()
var name: String
var imageName: String
}
let wineScents: [WineScent] = [
WineScent(name: "블루베리", imageName: "blueberry"),
WineScent(name: "올리브", imageName: "olive"),
WineScent(name: "자두", imageName: "plum")
// ... 생략
]
일단 뷰 작업 이전에 모델과 구조를 잡아놓고 해야겠다는 생각을 했다. 역시 기존의 앱 구조를 확인해보니 엉망이었다... 아래와 같이 Observable 이 단순하게 초기화와 데이터를 중간에 가지고 있는 정도만 하고 있었다. 확실히 쓸모없어보이는 코드였다...! 심지어 싱글톤사용까지... 수정이 시급해보였다.
@Observable
final class WineNoteObservable {
var name: String = ""
var date: Date = Date()
var type: WineType = wineTypes[2]
var image: Data?
var color: WineColor = wineColors[0]
var scents: [WineScent] = []
var taste: [Double] = [0, 0, 0, 0, 0]
var think: String = ""
var rating: Double = 0.0
static var shared = WineNoteObservable()
func reset() {
name = ""
date = Date()
type = wineTypes[2]
image = nil
color = wineColors[0]
scents = []
taste = [0, 0, 0, 0, 0]
think = ""
rating = 0.0
}
}
또한 아래와 같이 똑같은 느낌의 뷰의 중복이 많아보이고 줄일 수 있는 여지가 너무 많아보였다.
고칠 부분이 너무 많이 보여서 따로따로 글로 작성하기로 했다!
'→ Taster' 카테고리의 다른 글
[Project-Taster] 모델 수정 (SwiftData) (3) | 2024.11.01 |
---|---|
[Project-Taster] SwiftData 마이그레이션 (0) | 2024.10.20 |
[Project-Taster] 앱을 고도화 시켜보자!! (1) | 2024.10.06 |
[Project-Taster] 버전 업 - 폰트 적용 및 중복 이미지 코드화 (0) | 2024.08.13 |
[Project-Taster] 버전 업 - 시작 (0) | 2024.08.12 |