Toy Project/To Do List (iOS)

5. Todo, TodoManager

개발자킹콩 2021. 3. 7. 19:46

Todo: 우리가 사용할 데이터의 형식이다. struct로 선언할 것이다.

TodoManager: 데이터를 관리할 클래스이며 ViewModel에서 필요한 기능들을 Manager에서 구현하고 이를 호출할 것이다.

 

 

 


 

 

Todo: 우리가 사용할 데이터의 형식이다. struct로 선언할 것이다.

 

 

 

이제 TodoListCell에 대해 쭉 봤는데 여기서 필요한 데이터인 Todo 객체가 존재한다. 알아보자.

Control + cmd 를 눌러 클릭하면 정의된 부분으로 슉~ 갈 수 있다. 

 

 

 

 

 

 

Todo에서는 데이터들이 가지고 있어야할 데이터의 구조를 짜두었다.

여기서 method가 2개 존재하는데 

  1. Mutating —> struct에서 property의 값 변경을 일으키는 메소드 앞에 선언해주어야한다.

  2. 연산자 오버로딩

 

연산자 오버로딩은 Equatable를 상속받았기에 정의할 수 있다.

 

 

 

 

메소드를 다음과 같이 정의하였다. 기능은 간단하다. property update method, operator overloading.

연산자 오버로딩에서 == 의 경우 Equatable를 상속받아야만 사용할 수 있음을 기억하자.

Codable의 경우 데이터를 저장할 때 사용한다고 했는데 아직은 넘어가도록 하자.

 

 

 

 

 


 

 

 

 

TodoManager: 데이터를 관리할 클래스이며 ViewModel에서 필요한 기능들을 Manager에서 구현하고 이를 호출할 것이다. 즉, TodoManager은 Todo 객체를 관리할 객체

 

 

현재 해야할 일에 해당하는 데이터를 다음과 같이 구성됨을 정의하였다.

그런데 해야할 일에 여러개 라면 이를 관리하는 객체 또한 존재하는 것이 기술부채의 최소화과 유지보수 및 관리에 용이 할 것이다. 그렇기에 이를 관리하는 TodoManager 이 존재한다. 

 

우리가 이용하는 디자인 패턴인 MVVM패턴의 경우 ViewModel과 ViewController의 communication이라고 봐도 될 텐데, 이때 ViewModel에 해당하는 객체는 위의 TodoManager을 이용해서 ViewController과 데이터를 캡슐화해서 메소드 호출로 주고 받게 될 것이다.

 

 

 

 

 

shared: 우선 TodoManager은 singleton object임을 확인했다.

이는 1개만 존재하며, 앱 내에서 여기저기서 불려다닐 때 사용하는 객체이다.

그렇다면 TodoViewModel에서 유용하게 사용할 듯 하다.

 

lastId: 이렇게 singleton객체로 만들었다면 todos의 데이터의 갯수를 계속해서 세아리면서 id를 메기는 것보다는

lastId를 기록하여 이를 통해 데이터의 갯수 및 id를 메기기를 사용하면 될 듯하다.

 

todos: Todo 객체 데이터를 갖고있다.

 

createTodo: detail과 Today 클릭 여부만 알고 있다면 이를 Todo 객체로 만들 수 있는 메소드이댜. 

 

 

saveTodo: todos에 저장된 데이터를 json파일로 저장하는 메소드이다.

retrieveTodo: todos.json파일에 저장된 데이터들을 각각 Todo 객체로 만들어서 todos에 집어넣는 메소드이다.

 

 

addTodo: Todo객체가 들어오면 이를 todos에 넣기만 하면 된다. 그리고 json파일에 출력하는 함수를 호출한다.

 

 

 

 

deleteTodo: add와 거의 유사하다.

그런데 delete의 경우 어떻게, 무엇을 기준으로 지울 건가에 대해 성능이 달라지는 경우가 존재한다.

간단하게 구현하면 아래와 같이 id가 같은 데이터를 찾아서 해당 index의 데이터를 지우고 저장하면 된다.

 

알고리즘 적으로도 이게 효율적일 수도 있다. 하지만 우리는 가독성이 좋은 방법으로 구현해볼 것이다. —> filter, Closure

 

들어온 데이터 todo와 id 가 다른 놈들만 filtering하여서 todos객체에 다시 넣는 구조이다. 

closure의 경우 줄이면 아래와 같이도 줄일 수 있다. 

 

 

 

 

 

updateTodo: 업데이트할 데이터가 들어올때 업데이트하는 기능인 메소드이다.

 

 

 

 


 

 

 

 

이렇게 완성된 TodoManager의 경우 TodoViewModel에서 사용하게 되고, TodoViewModel은 ViewController에서 사용하게 된다. 아직 Storage를 완성하지 않아 JSON파일을 R/W하는 기능은 주석처리 하였다. 

 

 

 

'Toy Project > To Do List (iOS)' 카테고리의 다른 글

7. TodoListCell 완성  (0) 2021.03.09
6. View Model  (0) 2021.03.08
4. TodoListCell  (0) 2021.03.07
3. Tasks Page  (0) 2021.03.06
2. Settings Page  (0) 2021.03.05