Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- class struct
- 면접을 위한 CS전공 지식 노트
- 자료구조
- Input Output
- CarouselCollectionview
- wil
- UIKit
- CoreData
- Array vs Linked List
- TableView Section
- @escaping
- TableView
- coremotion
- Carousel CollectionView
- Value Type Reference Type
- 양궁대회
- firebase
- Reference Cycle
- retain cycle
- til
- tableview section별 다른 cell적용
- UserDefaults
- 롤케이크 자르기
- SWIFT
- 프로그래머스
- ReferceCycle
- 테이블뷰 나누기
- 강한 참조 순환
- 면접을 위한 CS 전공 지식 노트 Tree
- NavigationSearchBar
Archives
- Today
- Total
개발하는 동글 :]
[TIL],[UIKit],[TRY],[MVVM 적용해보기] 본문
1. MVVM 양식에 맞게 코드를 적어보자!
아직은 아키텍처 패턴은 잘 모르겠지만 MVVM에 맞게 한 번 코드를 짜보자!
그럼 MVVM은 뭘까?

MVVM 패턴을 사용하는 경우 앱은 다음 계층으로 나뉩니다.
- 모델 계층은 비즈니스 데이터를 나타내는 형식을 정의합니다. 여기에는 코어 앱 도메인을 모델링하는 데 필요한 모든 항목이 포함되며, 종종 코어 앱 논리가 포함됩니다. 이 계층은 뷰 및 뷰 모델 계층과는 완전히 별개이며, 클라우드에 부분적으로 상주하는 경우가 많습니다.
- 뷰 계층은 UI를 정의합니다. 태그에는 특정 UI 구성 요소와 다양한 뷰 모델 및 모델 멤버 간의 연결을 정의하는 데이터 바인딩이 포함되어 있습니다. 경우에 따라 코드 숨김 파일은 UI를 사용자 지정하거나 조작하는 데 필요한 추가 코드를 포함하거나, 작업을 수행하는 뷰 모델 메서드를 호출하기 전에 이벤트 처리기 인수에서 데이터를 추출하는 데 사용됩니다.
- 뷰 모델 계층은 뷰의 데이터 바인딩 대상을 제공합니다. 대부분의 경우 뷰 모델은 모델을 직접 노출하거나 특정 모델 멤버를 래핑하는 멤버를 제공합니다. 또한 뷰 모델은 항목 목록의 표시 순서와 같이 UI와는 관련이 있지만 모델과는 관련이 없는 데이터를 추적하는 멤버를 정의할 수 있습니다. 또한 뷰 모델은 데이터베이스 액세스 코드와 같이 다른 서비스와의 통합 지점 역할을 합니다. 간단한 프로젝트의 경우 별도의 모델 계층이 필요하지 않을 수 있으며 필요한 모든 데이터를 캡슐화하는 뷰 모델만 있으면 됩니다.
2. ViewModel을 만들어 보자!
final class TodoListViewModel{
var viewUpdate : () -> Void = {}
private var coreDataManager = CoreDataManager.shared
func getToDoList() -> [Task]{
print(#function)
return coreDataManager.getToDoListFromCoreData()
}
func updateToDoCompletedToggle(task: Task){
print(#function)
coreDataManager.updateCompleted(task: task) {
self.viewUpdate()
}
}
func addToDo(title: String){
print(#function)
coreDataManager.saveToDoData(title: title) {
self.viewUpdate()
}
}
func deleteToDo(task:Task){
print(#function)
coreDataManager.deleteToDo(task: task) {
self.viewUpdate()
}
}
func updateToDoTitle(task:Task, title:String){
print(#function)
coreDataManager.updateToDo(task: task, title: title) {
self.viewUpdate()
}
}
}
viewModel에서 coredataManager를 가지고 view에 데이터를 주거나 받을 메서드를 구현해 줬다!
3. ViewContorller
final class ToDoListViewController: UIViewController {
}
extension ToDoListViewController{
// MARK: - 라이프 사이클
override func viewDidLoad() {
super.viewDidLoad()
setUp()
}
}
private extension ToDoListViewController{
func setUp(){
view.backgroundColor = .systemBackground
setUpTableView()
setUpAddButton()
viewModel.viewUpdate = { [weak self] in
guard let self = self else { return }
self.myTableview.reloadData()
}
}
}
viewcontroller에서 viewModel의 viewUpdate closure를 수정해 주자! 이렇게 코드를 수정하게 된다면 viewcontroller에서 viewmodel의 메서드를 사용할 때 자동으로 view가 업데이트를 하는 로직을 구현할 수 있었다!
4. TIL
4.1 이번 주의 회고
1. 이번 주는 과제를 하느라 정신없이 흘러간 것 같다. 좀 더 깊은 내용을 공부할 수 있도록 하는 습관을 가지는 게 좋을 것 같다..
2. protocol과 enum을 조금 더 사용해보는게 좋을 것 같다.
3. 알고리즘을 꾸준히 푸는 것에 소흘해 졌다..
4.2 다음 주의 목표
1. 아키텍쳐 패턴을 조금 더 이해하고 적용하는 코드를 사용해 보자.
2. 알고리즘을 꾸준히 풀자
3. protocol과 enum 그리고 제네릭 까지 조금 더 깊게 공부하고 사용해 보는 것을 연습해 보자