⎮ DataModel 작성하기
내가 담당한 View는 자체적으로 사용하는 데이터가 필요한 상황이었다

와이어프레임 기준으로 봤을 때,
항목을 누르면, 각 상황들이 나오는 방식이고
상황을 클릭하면 다음 페이지에서 요청할 키워드를 넘겨줘야하는 방식이었다
이 데이터는 서버에서 받아오는 것이 아니기 때문에, 내부적으로 가지고 있을 수 있도록 DataModel을 구현해야했다
import Foundation
struct SituationDataModel {
let category: Category
let sections: [SectionData]
}
enum Category {
case daily
case workout
case company
case love
case season
var title: String {
switch self {
case .daily: return "일상"
case .workout: return "운동"
case .company: return "직장"
case .love: return "연애"
case .season: return "계절"
}
}
}
struct SectionData {
let title: String
let hashTags: [String]
let keywords: [String]
}
데이터에서 필요한 케이스는 일상, 운동, 직장, 연애, 계절이므로
각각의 Category를 enum으로 만들어서 case를 지정해줬다
또한 각 Section별로 데이터를 가질 수 있도록
SectionData를 만들어 SituationDataModel의 속성으로 설정해주었다
이렇게 만들어진 모델을 토대로,
SituationDataManager를 만들어서 데이터 작성하는 것으로 방향을 잡았다
DataManager에서 SituationDataModel을 만들면, 다음과 같이 작성할 수 있다
struct SituationDataManager {
private let dailySituationsData: SituationDataModel =
SituationDataModel(
category: .daily,
sections: [
SectionData(title: "고생한 나에게 주는 보상",
hashTags: ["#시험 끝", "#자유"],
keywords: ["치킨", "족발"],
SectionData(title: "늦게 일어났어도 밥은 먹자",
hashTags: ["#아점", "#브런치"],
keywords: ["브런치", "포케"]
{ ... }
]
)
그리고 loadCategoryData라는 메서드를 만들고, category에 따라 Data를 return하도록 분기처리를 했다
func loadCategoryData(category: Category) -> SituationDataModel {
switch category {
case .daily:
return dailySituationsData
case .workout:
return workoutSituationsData
case .company:
return companySituationsData
case .love:
return loveSituationsData
case .season:
return seasonSituationsData
}
}
물론 하나하나 다 만들어주는게 효율적인 구조는 아닌 것 같지만, 일단 이렇게 작성하고 추후 리팩토링을 할 예정이다
위의 메서드는 다음과 같은 형태로 사용될 수 있다
situationManager.loadCategoryData(category: .company)
⎮ DataModel 수정하기
위의 구조만으로, 데이터 바인딩을 하려고 했으나
Tag 정보가 없다는 것을 깨닫고 리팩토링 하기로 했다

위의 사진처럼 우측 상단 Tag에 카테고리가 들어가야한다
struct SituationDataManager {
private let dailySituationsData: SituationDataModel =
SituationDataModel(
category: .daily,
sections: [
SectionData(title: "고생한 나에게 주는 보상",
hashTags: ["#시험 끝", "#자유"],
keywords: ["치킨", "족발"],
category: .daily,
SectionData(title: "늦게 일어났어도 밥은 먹자",
hashTags: ["#아점", "#브런치"],
keywords: ["브런치", "포케"],
category: .daily,
{ ... }
}
각 SectionData의 맨 마지막 category에 카테고리 키워드를 추가해주었다
'스파르타코딩 클럽 > 팀프로젝트' 카테고리의 다른 글
| EatsOkay : 당신의 하루를 위한 한끼 (0) | 2025.06.19 |
|---|---|
| 팀프로젝트4 [식당 큐레이팅 앱(2) - Data Flow 작성, Google API] (0) | 2025.06.10 |
| 팀프로젝트4 [식당 큐레이팅 앱(1) - 앱 기획] (0) | 2025.06.08 |
| 팀프로젝트3 [날씨 앱 만들기(3) - UserDefaults 매니저 구현하기] (0) | 2025.05.25 |
| 팀프로젝트3 [날씨 앱 만들기(2) - Moya 라이브러리 사용기] (1) | 2025.05.25 |