https://github.com/protocorn93/iOS-Architecture
iOS Architecture Patterns 글을 참조하여 콘이 작성한 글을 그대로 작성한 것이다.
구조를 생각하지 않고 프로그램을 작성한다고 프로그램이 돌아가지 않는 것은 아니다. 하지만 이런 프로그램은 가독성이 떨어지고 유지 보수 비용이 많이 든다. 또한 테스트 단계에서 테스트 자체가 불가능할 수 있다.
단순히 모듈(클래스)을 역할별로 나누어 관리하는 것이 아키텍쳐는 아니다. 특정 기준으로 역할을 정의하며 역할별로 나누어진 모듈간의 관계를 유기적으로 형성한 것이 아키텍쳐라 할 수 있다.
좋은 아키텍쳐은 기준과 특징
Balanced Distribution
: 객체들의 역할이 확실하며 이런 역할들이 균형있게 분배되어 있는지 각 모듈이 독립적인지를 확인한다. ****
Testability
: 테스트를 진행할 수 있는지 확인한다.
Easy of USE
: 사용하기 쉬운지를 확인한다
Unidirectional Data Flow
: 단방향성의 데이터 흐름인지 확인한다
프로젝트의 성격에 맞게 선택적으로 도입해야 한다.
Distribution
Model
: 프로그램에서 사용되는 데이터의 조작이 일어나고 이를 담당하는 부분이다.View
: 시각적인 부분(UI)에 해당한다. (iOS환경에서 UI
접두어가 붙은 모든 것들이 이에 해당한다)Controller
/ Presenter
/ ViewModel
: Model
과 View
사이의 중재자로 일반적으로 View
를 통해 발생한 사용자의 액션을 다루며 필요시 이에 따른 Model
에 값의 조정을 요청하며 Model
값의 변화에 맞게 View
를 갱신하는 역할을 말한다.위와 같이
Distribution
을 기준을 정해 나누어 진행한다면 재사용성이 증가하며 독립적으로 테스팅할 수 있게 된다.