1. 기존 방식과 제안 방식 비교
기존 방식:
struct Feed {
let id: UUID
let title: String?
let contents: String?
let date: Date?
let imagePath: [String]
}
- 장점:
- 데이터가 간단하게 정의되어 있고, 각 피드가 독립적인 단위로 사용 가능.
- 필요한 정보가 한 구조체 안에 모두 포함되어 있어 코드가 직관적.
- 단점:
- Feed에 관련된 고유 ID 및 관리 로직이 포함되어 있어, 이 로직이 확장되거나 복잡해질 경우, 구조체가 비대해질 수 있음.
제안 방식:
struct FeedManager {
let id: UUID
let feed: Feed
}
struct Feed {
let title: String?
let contents: String?
let date: Date?
let imagePath: [String]
}
- 장점:
- id가 FeedManager로 이동하면서, Feed 구조체는 순수 데이터만을 다루게 됨.
- FeedManager에서 추가적인 로직(예: ID 기반 검색, 필터링 등)을 구현할 수 있음.
- 관리 용도가 분리되면서 확장성 증가.
- 단점:
- 코드를 작성할 때 한 단계 더 깊이 들어가야 하므로 약간의 복잡성 증가.
- FeedManager 배열을 다룰 때, 데이터를 접근하려면 feedManager.feed처럼 중첩된 접근 필요.
2. 언제 사용하면 좋은가?
FeedManager 방식이 적합한 경우:
- Feed에 추가적인 관리 로직이 필요하거나, id를 사용해 데이터 검색, 필터링 등의 작업이 많이 발생하는 경우.
- id를 별도의 관리 단위로 사용해 Feed와 관련 없는 로직을 처리하고 싶은 경우.
- 데이터가 더 복잡해질 가능성이 높고, 구조를 확장하려는 경우.
기존 방식이 적합한 경우:
- Feed가 비교적 간단하게 사용되고, ID와 데이터가 항상 같이 다뤄지는 경우.
- 추가 관리 로직이 거의 없고, 단순한 데이터만을 처리할 경우.
3. FeedManager 방식으로 구현 예제
FeedManager와 Feed를 사용한 배열 관리
var feedManagers: [FeedManager] = []
// 새로운 Feed 추가
let newFeed = Feed(title: "Sample Title", contents: "Sample Content", date: Date(), imagePath: ["path1", "path2"])
let newFeedManager = FeedManager(id: UUID(), feed: newFeed)
feedManagers.append(newFeedManager)
// 특정 FeedManager의 Feed에 접근
if let firstFeed = feedManagers.first?.feed {
print("Title: \(firstFeed.title ?? "No Title")")
}
// ID로 FeedManager 검색
if let foundFeedManager = feedManagers.first(where: { $0.id == UUID() }) {
print("Found Feed: \(foundFeedManager.feed.title ?? "No Title")")
}
FeedManager로 검색, 필터링 로직
// Feed ID로 검색
func findFeedByID(_ id: UUID, in managers: [FeedManager]) -> Feed? {
return managers.first(where: { $0.id == id })?.feed
}
// FeedManager 내 이미지 경로 접근
func getImagePaths(from managers: [FeedManager], id: UUID) -> [String]? {
return managers.first(where: { $0.id == id })?.feed.imagePath
}
// 사용 예제
if let imagePaths = getImagePaths(from: feedManagers, id: newFeedManager.id) {
print("Image Paths: \(imagePaths)")
}
4. FeedManager 방식을 사용하면 유용한 이유
- 유연성 증가: ID와 데이터가 분리되어, ID 중심의 로직과 데이터 중심의 로직을 각각 확장 가능.
- 관리 용이: 배열을 관리할 때 ID를 키로 사용하면 검색과 정렬이 쉬움.
- 단일 책임 원칙 준수: 데이터 관리와 데이터 표현을 분리.
'Swift' 카테고리의 다른 글
파일 매니저와 코어 데이터를 사용하여 텍스트와 이미지 저장하기 (0) | 2024.11.27 |
---|---|
Feed의 Id는 언제 생기나? (0) | 2024.11.26 |
ArraySlice와 Array (0) | 2024.11.25 |
스위프트에서 Extension은 어떻게 사용되나요? (0) | 2024.11.20 |
Core Data의 Bool? 이거는 왜 안되나? (0) | 2024.11.19 |