본문 바로가기
스파르타코딩 클럽/팀프로젝트

팀프로젝트4 [식당 큐레이팅 앱(3) - Data Model 작성]

by UDDT 2025. 6. 11.



 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에 카테고리 키워드를 추가해주었다

최근댓글

최근글

skin by © 2024 ttuttak