[iOS] DesignPattern - MVC Pattern
Design Pattern - MVC
Design Pattern이란?
-
설계할 때 자주 쓰이는 템플릿
-
선배들의 삽질기록
-
코드의 모양새
설계할 때 자주 쓰이는 템플릿
선배들의 삽질기록
코드의 모양새
Design Patterns(1994) by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
개발자 선배들은 디자인 패턴을 아래와 같은 이점 때문에 디자인 패턴을 사용하기 시작했다:
- OOP의 다양한 문제상황에 대한 예방
- 프로그래머 사이의 협업효율 향상
- 프로그래머 사이의 의사소통 증진
- 코드의 안정화 및 최적화
- 코드의 재사용성 증가
단, 적절히 잘 사용하자
디자인 패턴을 수단으로 사용해야지 목적으로 사용하면 주객전도되는 상황이 생길 수도 있다.
*주어진 패턴을 상황에 맞게 변경을 해서 사용해야 하는데 디자인 패턴에 집착하게 되면 유연하게 패턴을 적용 및 변경을 못하게 된다. 따라서 100퍼센트 지킬 필요는 없지만 명확하게 알아두면 쓸 일이 많다.
Design Patterns vs Architectures
-
Architecture: 큰 그림, 소프트웨어의 전반적인 큰 그림
ex) 서양 건축물 양식, MVC architecture
-
Design Pattern: 이 Architecture 안에서 세세한 부분을 해결하는 해결방식
ex) 서양 건축물 안의 불편한 설계부분을 수정해서 현재에 맞게 적용하는 것.
MVC 란 무엇인가?
Model(M)
Model은 앱의 데이터를 담당합니다. 데이터에 대한 로직을 담당하고 더 나아가 데이터의 값 변경 및 관리를 담당합니다.
-
Network Code: network request, http header, response, 그리고 error 처리를 해주는 코드가 Model에 포함될 수 있습니다.
Ex:
class Network { static func loadJSONFile<T: Decodable>(named filename: String, type: T.Type, queue: DispatchQueue? = DispatchQueue.main, simulateLoadDelay: Bool? = true, delaySeconds: TimeInterval = 0.2, completionHandler: @escaping (T?, NetworkError?) -> Void) { // urlSession // request // jsonData parsing, date formatter }
-
Persistence code: Data base, Core Data, 또는 기기의 데이터를 저장하는 코드
Ex:
class Event { // // MARK: - Variables And Properties // var attendees: [Attendee] = [] var sessions: [Session] = [] // // MARK: - Instance Methods // func attendees(for session: Session) -> [Attendee] { return attendees.filter { (attendee) -> Bool in session.attendeesBadges.contains(attendee.badgeNumber) } } func sessions(for attendee: Attendee) -> [Session] { return sessions.filter { (session) -> Bool in session.attendeesBadges.contains(attendee.badgeNumber) } } }
-
Parsing code: 네트워크에서 받아온 json데이터를 iOS에서 사용할 수 있게 변환 해 주는 코드 또한 필요합니다
Ex:
class Attendee: CustomStringConvertible, Decodable { // // MARK: - Variables And Properties // var age: UInt8 var badgeNumber: UInt8 var isFirstTimeAttending: Bool var name: String var nationality: String var description: String { return """ Name: \(name) Nationality: \(nationality) Age: \(age) Badge Number: \(badgeNumber) Attending For The First Time: \(isFirstTimeAttending ? "Yes" : "No") """ } // // MARK: - Initialization // init(age: UInt8, badgeNumber: UInt8, isFirstTimeAttending: Bool, name: String, nationality: String) { self.age = age self.badgeNumber = badgeNumber self.isFirstTimeAttending = isFirstTimeAttending self.name = name self.nationality = nationality } }
-
Managers and abstraction layer/class:
View
사용자에게 보여지는 화면(UI)를 담당합니다.
Controller
Model과 View를 연결 해주는 역할을 담당합니다.
[참고]:
Model-View-Controller(MVC) in iOS - A Modern Approach
Model-View-Controller | Concepts in Objective-C Programming
Author And Source
이 문제에 관하여([iOS] DesignPattern - MVC Pattern), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@inwoodev/iOS-DesignPattern-MVC-Pattern저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)