상세 컨텐츠

본문 제목

App Architecture. Model-View-Controller

TIL/App Architecture

by box-jeon 2018. 8. 21. 08:41

본문

우리동네동네북  MVC 입니다. 

https://github.com/objcio/app-architecture/tree/master/Recordings-MVC



기본적으로 Composite pattern, Strategy pattern, Observer pattern 3가지 패턴이 녹여져 있으며, 이 중 Observer pattern이 흔히 무시된다고 합니다. 처음 MVC를 배운 건 학생 시절 웹프로그래밍을 배울 때였는데, 웹프로그래밍에서 View는 html/css, Model은 db에 대응되지만, 앱에서의 Model은 보통 REST API를 통해 받은 데이터의 임시 저장소인 경우가 많습니다. 어딘가에 저장하고 가져온다기 보다는 메모리에 그냥 저장해놓고 쓰기 때문에 값 변경은 즉시 이루어지고, 다음에 필요한 동작을 이어서 수행하면 충분한데, 굳이 Observer pattern을 적용하는 건 너무 고리타분하단 이야기죠. 하지만 테스트 작성할 생각을 하면 다 이유가 있는 고리타분함이라고 해야겠네요. 뒤에 나올 'Networking' 챕터에서 REST API 호출 부분까지도 Model이 담당해야한다는 아이디어가 소개될 거라고 하는데, 아마도 Observer pattern까지 적용해야하는 것 치곤 Model의 역할이 너무 작다는 이유가 아닐까 싶습니다.


MVC패턴은 이해하기가 쉽고, 유연한 것이 장점이라고 합니다. 좋게 말하면 유연한 거고, 나쁘게 말하면 디테일한 규격이 없다는 뜻이겠지요. 

MVC 패턴의 단점으로 2가지를 언급하고 그를 개선하기 위한 방법들을 나열합니다.

단점 1. Observer Pattern Failure

  • NotificationCenter를 이용해 이런저런 방법들을 소개하고 있지만 결론은 Rx 가야된다고...

단점 2. Massive View Controllers

  • Code Instead of Storyboards: Storyboard를 사용하면 view controller의 생성자를 사용할 수 없으니 view controller 생성을 코드로 하자고 합니다. 이미 그렇게 쓰고 있어서 무척 반갑긴 했지만, 이게 어떻게 massive view controller를 개선하는지 이해하지 못했습니다.
  • Reusing Code with Extensions: Protocol Oriented Programming을 통해 코드를 줄여보자고 합니다. keyboard 관련된 동작은 늘 비슷하지만 공통화하기는 애매한 부분이 있었는데, 코드를 보니 괜찮은 아이디어인 것 같습니다.
  • Reusing Code with Child View Controllers: Child View Controller를 만들어서 역할을 나눠주는 방법입니다. 실제로 코드 사이즈를 줄이는 건 아니고, 역할에 따라 코드를 좀 더 나눠서 읽기 좋게 만들자는 아이디어로 보입니다.
  • Extracting Objects: UITableViewDataSource 같은 애들을 View Controller가 아니라 별도의 클래스가 conform하도록 하고, 정의된 클래스의 객체를 View Controller가 갖도록 하는 방법입니다. 역시나 실제로 코드를 줄여주는 건 아니고, 읽기 좋게 만드는데 의미를 두는 것으로 보입니다.
  • Simplifying View Configuration Code: View configure를 superview의 view controller가 하도록 두지 말고, 해당 view가 직접 갖는 게 좋다고 합니다. 왜 이런 당연한 이야기를 할까 싶기도 하지만, 일 하면서 자주 목격되는 코드이기도 합니다.


관련글 더보기

댓글 영역