Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pull Request
resolve: #1
resolve: #2
resolve: #3
resolve: #4
resolve: #5
전체적인 프로젝트 구조와 주요 화면(Main, Stopover, End, Setting - 제플린에 사용된 네이밍 규칙 사용)의 구조를 잡았다.
구조 이해가 힘들 수 있어 MVP 디자인 패턴 설명과 더불어 프로젝트 구조에 대해서도 설명한다.
기존의 MVC 패턴
MVC 디자인 패턴은 Model-View-Controller 로 이루어진 디자인 패턴이다.
(MVC 패턴의 자세한 설명은 검색을!!)
MVC 패턴은 비즈니스 로직을 Model Layer에 구현하여 UI 로직과 분리할 수 있다는 장점을 가진다.
그러나 UIViewController 는 너무 많은 UI 로직을 구현하게 되어 거대해진다.
Navigation 로직, 버튼 활성화/비활성화, 키보드 보이기/숨기기, 이미지 이동하기, UI 내 데이터 변경 등과 같이 UI와 관련된 로직은 너무 많다.
뿐만 아니라, 사용자의 터치 등과 같은 제스처도 처리해야 한다.
그래서 Controller Layer의 부담을 줄이기 위해 등장한 것이 MVP 패턴이다.
MVP
MVP 디자인 패턴은 Model-View-Presenter 로 이루어진 디자인 패턴이다.
우리가
출발지
,도착지
데이터로경로
데이터를 만든다 등의 로직이 여기에 속한다.(예상 소요 시간, 따릉이 예상 요금 등의 계산도 이 로직에 다 포함된다.)
Model Layer의 데이터를 가공하여 UI에 사용하기 좋은 형태로 바꾸고 View를 업데이트한다.
UIKit
과 의존성이 없어야 한다.프로토콜로 정의된 함수를 사용하여 UI를 조작하지만 실제로 UI 조작에 관여하지 않는다.
UI 조작은 프로토콜을 구현한 View Layer의 UIViewController가 한다.
(Swift의 Protocol이 여기서 진가를 발휘함)
프로젝트 구조 설명
프로젝트 내 패키지는 크게
Resource, Common, Extension, Main, Stopover, End, Setting
으로 구성했다.Resource
버튼에 사용되는 이미지, 영상, lottie 파일 등을 두는 패키지.
코드와 상관 없는 외부 리소스 파일을 모아둔다고 생각하면 될 것 같다.
Common
여러 패키지에 공통으로 사용되는 코드를 두는 패키지.
Extension
기존에 구현된 코드에 대해 추가 구현한 코드를 두는 패키지.
예를 들어, UIColor 패키지에는 Apple의 기본 컬러들이 구현되어 있지만,
Extension/UIColor+.swift
파일을 보면 제플린에 사용된 color들을 구현하였다.이를 사용할 때는
UIColor.xxx
와 같은 형태로 사용하면 된다.이와 같이 기존의 구현된 것을 확장하고자 할 때 사용하는 패키지.
Main, Stopover, End, Setting
우리의 주요 화면들을 각각 분리한 패키지들.
Main은 첫 지도 화면, Stopover는 경유지 선택 화면, End는 결과 화면, Setting은 계정 정보 및 주행 기록 화면이다.
(네이밍은 제플린을 따랐음!!! 내 의견 아님~~)
각 패키지에는 Model, View, Presenter 패키지가 존재한다.
Model은 Model Layer에 해당하는 패키지다.
Location.swift
와 같이 데이터를 정의하는 파일과LocationService.swift
와 같이 데이터를 이용하는 로직이 구현된 파일이 존재한다.View는 UI 관련된 파일이 존재한다.
UIViewController들이 존재할 것이고, Presenter가 사용할 프로토콜을 구현한
xxViewController+ViewProtocol.swift
파일이 존재할 것이다.이외에 UI 구현에 필요한 UIView 파일들도 여기서 구현하면 된다.
Presenter는 UI 데이터 가공과 인터랙션 처리를 담당한다.
xxViewData.swift
는 가공된 UI 데이터를 의미한다.xxViewProtocol.swift
은 Presenter가 UIViewController의 구현체를 알지 않으면서 UI 처리하기 위해 존재한다.xxPresenter.swift
는xxViewData.swift
와xxViewProtocol.swift
를 사용하여 자신의 임무를 수행한다.참고
예제 코드를 보고 싶다면 밑의 링크 참고!
http://iyadagha.com/using-mvp-ios-swift/