Skip to content

Dunkkkk/FindToilet

Repository files navigation

대똥여지도

본 README는 블로그와 같은 형태이고 코드리뷰는 블로그에서 확인하시면 자세한 설명이 있습니다.

목차

1. 설계 목적 및 스펙

2. 느낀점

3. 회고

설계 목적

😵‍💫 설계 목적 과 이름의 이유

대똥여지도는 밖에서 배가 수시로 아픈 나를 위해 혼자 만든 토이프로젝트이다. �언제 어디서든 똥이 마려운 대한민국 사람이 사용하도록 만들었고, 언젠가 출시고 할것이다!!! ( 삼천만 대변인을 위하여 ) 이름은 고산자 김정호 선생님의 대동여지도를 바탕으로 패러디해봤다.

진짜 이유!

내가 프로젝트를 블로그에도 쓰는 이유는 바로 MVVM 공부에 있다. 애플도 MVC가 이제는 별로라고 말하는 마당에 내가 MVC로 UI를 그리고 프로젝트를 진행하는 것은 의미가 없다고 생각한다. 그래서 이번 대똥여지도는 MVVM 패턴으로 설계되었다. 완벽하진 않지만 좋게 봐주시길 ... ( 피드백은 언제나 수용합니다. 더 좋은 코드를 위한 혼냄 부탁드립니다. )

스펙

  • UIkit
  • Rxswift, Rxrelay, Rxcocoa
  • SnapKit
  • Alamofire
  • KakaoMapApi, KakapLocalApi
  • simulator - iphone 12 mini

기능 및 설명

화면은 1개이다. 화면

참으로 간단하다.... 앞서 말했던 것처럼 MVVM을 공부할 목적이 컸기 때문에 UI는 큰 신경을 사용하지 않았다.

실행영상은 누르시면 들어가집니다 !!

코드 설명이나 구조는 추후에 포스팅하겠슴다.

느낀점

우선 MVC패턴으로 코드를 짜다보니 잘 나눠도 한 파일에 코드가 너무 많고 내가 짜도 알아보기 힘들었다. 확실히 MVVM패턴의 장점은 있는 것같다.

view 와 viewmodel에 독립성이 있어서 코드를 크게 왔다갔다하면서 참고하지 않아도 되었다.

우선, 나는 페이지가 많지 않나 wireframe이나 figma등을 활용하지 않았지만, 코드를 짤 때, view에 데이터들을 bind를 먼저 했는데 이런 흐름이었다.

"흠 이 지도에는 마커가 찍혀야되니까.. viewmodel에 현재 위치를 담는 driver하나 있겠고 여기다 bind" "흠 현재 위치, 키워드, 범위는 독립적인 stream에 존재하고, search button이 tap 되었을 때만 데이터 bind"

이러식으로 viewmodel에 있을 것같은 것들을 bind했고, 선언만 해준 채로 view를 끝내고 후에 viewmodel을 설계했다.

서로의 범위를 크게 신경쓰지 않으니 독립적인 코딩이 되는 구나 하는 것을 몸소 느꼇다.

비동기적으로 데이터를 처리하니 해놓고 나면 함수가 잘 실행되는지 어떤 타이밍에 실행되는 지 보다 stream에서 어떻게 돌아가는 지를 생각하게 되고, 이것을 항상 반영하니 편했다.

MVC로 코드를 짜게 되면, "이 버튼이 눌리면, 이 함수를 실행하고 클로져로 이 값을 받아서 여기서 [weak self] 처리하면서 UI니까 main thread에서 돌려야 겠다."

같은 깊은 생각은 크게 필요하지 않았다.

"여기 stream은 이런 데이터를 가지고 있지(언제 어떻게 생기는 지는 지금 필요없어 아까 확인해봤으니까) 그럼 이걸 지금은 요렇게 map만 해서 사용해야지"

같이 한 코드를 깊이 내려가는 것보다 훨씬 편했다.

힘들었던 점

생각보다 어려웠던 문법과 stream사이의 혼동

Rxswift를 공부하면서 문법을 열심히 공부했지만, 생각보다 자주 막혔다. 코드를 짜면서 "flatmap을 한번쓰고 해결할 순 없나? 이렇게 연속해서 flatmap을 사용하는게 옳은 방법인가?" "이 스트림은 tap에서 한번만 drive되는 데 왜 연속해서 값들이 계속 나오지?" 와 같이 어려웠던 문법과 stream이 많아지자 그것을 제어하는 것이 힘들었습니다.

어려웠던 깔끔하고, 정석적인 디자인 설계

아무래도 공부를 기반에 둔 토이프로젝트여서 조금 더 현업에서 이 문제를 어떻게 다루는지 궁금했고 이러한 질문이 들었다. "흠 카카오에선 이런 문제를 어떻게 처리할까?" "이 방식과 저 방식중 메모리나 효율적인 측면에서 어떤것이 좋을 까?" 하는 질문이 들어 서로를 고민하면 test를 빨리 배워서 어떤 것이 나은 것인가를 눈으로 보고싶었다.

회고

첫 MVVM이었다. 사실 TCA(aka. SCA)로 첫 비동기 프로그래밍을 해보고 싶었지만, 아직 swiftui가 미숙하고 combine도 해본적이 없어, RxSwift를 이용한 MVVM을 먼저 시도하였지만, 조만간 리팩토링하고 싶다.

이번 토이 프로젝트를 하면서 UI를 단순히 그리는 것보다 workflow나 재사용성을 강조한 프로그래밍이 훨씬 재미있다는 것을 느꼈고, iOS의 lifecycle이나 multi-thread 등을 더 공부해서 더 좋은 나만의 디자인 패턴을 만들고 싶다는 생각을 했다.

자세한 자체 코드리뷰는 추후에 게시하면 총총~~

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published