SlideShare a Scribd company logo
1 of 22
Download to read offline
MVC, MVP, MVVM
Bill Kim(김정훈) | ibillkim@gmail.com
[iOS]
목차
•Traditional MVC
•Apple’s MVC
•Cocoa MVP
•Cocoa MVVM
•References
Traditional MVC
Traditional MVC
•Model : Data(데이터) + Status(상태) + Logic(로직)을 담당
•View : Model을 표현하고 책임지는 객체
•Controller : Model과 View를 연결해주고 관리하는 객체
Traditional MVC
•장점 :
•- Model과 View를 확실하게 분리시켜준다.
•- Model 이 어디에도 종속되지 않아 쉽게 모델을 테스트 가능
•단점 :
•- Controller가 View에 따라서 깊에 종속되어 테스트가 제한
•- View가 변경되면 Controller도 변경이 필요
•- Controller가 커지고 시간이 지나면 유지보수가 어려움
•- 최신 iOS 개발에는 부적합해보임
Apple’s MVC
Apple’s MVC
•Model : Data(데이터) + Status(상태) + Logic(로직)을 담당
•View Controller : View가 Model을 표현하는 역할을 주로
•하며 View Controller와 연결되어 대부분 View Controller가
•모든 처리를 담당
Apple’s MVC
•장점 :
•- 전통적인 MVC의 장점과 비슷
•- View와 Controller가 사실상 하나라서 코드 라인이 적다
•- 개발 코드가 적어서 익숙해지면 개발 속도가 빠르다
•단점 :
•- 전통적인 MVC의 비해 View와 Contrller가 하나로 합쳐져서
View와 Controller의 역할이 모호하며 Contrller가 좀더
•커질 수 있음
•- 사실상 M + VC의 개념이다
•- View 라이프 사이클 및 테스트를 위한 View 작성이 어려움
Sample Code : MVC
Cocoa MVP
Cocoa MVP
•Model : Data(데이터) + Status(상태) + Logic(로직)을 담당
•(Passive) View : Presenter를 소유하며 액션을 보내주는 객체
•Presenter : Model을 소유하고 모델이 갱신되면 View 에 전달
Cocoa MVP
•장점 :
•- Model 및 Presenter에 거의 책임을 분리하여 View는 간결해짐
•- View와 별개로 비지니스 로직만 테스트 가능
•- 전반적으로 MVC보다 깔끔한 코딩이 가능
•단점 :
•- 일반적인 MVC보다 명확한 구분으로 인한 코드가 길다
•- 크지 않은 시스템에서는 비효율적인 구조가 될 수 있다
•- Presenter가 커지면 기존 MVC 처럼 유지보수가 어렵다
•- 경우에 Presenter를 여러개로 분리, 관리하기도 쉽지 않게된다
Sample Code : MVP
Sample Code : MVP
Cocoa MVVM
Cocoa MVVM
•Model : MVC, MVP에서의 Model와 같음
•View : View Controller가 View의 역할을 함
•View Model : Model을 소유하고 모델을 직접 갱신한다. 갱신에
대한 이벤트 및 액션을 View에 바인딩하여 전달한다.
Cocoa MVVM
•장점 :
•- View Model이 View에 대해서 전혀 모르며 테스트가 용이
•- View 또한 개별적인 테스트 용이
•- MVP보다 깔끔하며 코딩 양이 적다
•- View는 View Model과의 바인딩을 통하여 Model의 값의 변경을
• 쉽게 추적 및 업데이트 할 수 있다.
•단점 :
•- 기본 MVP의 View보다 MVVM의 View는 책임의 범위가 더 크다
•- Reactive 프레임워크를 주로 사용하기 때문에 경우에 따라 디버깅이 어
려움
•- 간단한 앱의 경우 MVC가 오히려 관리가 편하고 코드가 적음
Sample Code : MVVM
Sample Code : MVVM
References
References
[1] iOS Architecture Patterns : http://labs.brandi.co.kr/
2018/02/21/kimjh.html
[2] (번역) iOS 아키텍쳐 패턴들 : https://blog.canapio.com/43
[3] [디자인패턴] MVC, MVP, MVVM 비교 : https://
beomy.tistory.com/43
[4] MVC, MVP, MVVM 비교 : https://magi82.github.io/
android-mvc-mvp-mvvm/
[5] 안드로이드의 MVC, MVP, MVVM 종합 안내서 : https://
academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and-
mvvm-on-android/
Thank you!

More Related Content

Similar to [iOS] MVC, MVP, MVVM

iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdfssuser86e2971
 
hello mvp for android
hello mvp for androidhello mvp for android
hello mvp for androidWonjun Hwang
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulBansook Nam
 
주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf
주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf
주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf병근 손
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기정민 안
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)Sang Don Kim
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
Spring mvc
Spring mvcSpring mvc
Spring mvcksain
 
Implementing android mvi pattern
Implementing android mvi patternImplementing android mvi pattern
Implementing android mvi pattern금 허
 
maven 소개
maven 소개maven 소개
maven 소개Suan Lee
 
Backbone 발표
Backbone 발표Backbone 발표
Backbone 발표Gunhee Lee
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례Taehyun Kim
 
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...Amazon Web Services Korea
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)Hankyo
 
[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc구 봉
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드Opennaru, inc.
 
델파이 코드 마이그레이션 Step by Step
델파이 코드 마이그레이션 Step by Step델파이 코드 마이그레이션 Step by Step
델파이 코드 마이그레이션 Step by StepDevgear
 

Similar to [iOS] MVC, MVP, MVVM (20)

iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdf
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 
hello mvp for android
hello mvp for androidhello mvp for android
hello mvp for android
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf
주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf
주니어 입장에서 바라보는 디자인패턴 & 아키텍쳐.pdf
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
 
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
[Td 2015]각이 다른 mvc6! 그 여섯 번째 이야기!(최지훈)
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
Spring mvc
Spring mvcSpring mvc
Spring mvc
 
Implementing android mvi pattern
Implementing android mvi patternImplementing android mvi pattern
Implementing android mvi pattern
 
maven 소개
maven 소개maven 소개
maven 소개
 
Maven
MavenMaven
Maven
 
Backbone 발표
Backbone 발표Backbone 발표
Backbone 발표
 
무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례무정지&무점검 서버 개발과 운영 사례
무정지&무점검 서버 개발과 운영 사례
 
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...
Amazon SageMaker 모델 빌딩 파이프라인 소개::이유동, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스...
 
04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)04.실행환경 교육교재(화면처리)
04.실행환경 교육교재(화면처리)
 
[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc[웹기반시스템 3조] mvc
[웹기반시스템 3조] mvc
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드
 
델파이 코드 마이그레이션 Step by Step
델파이 코드 마이그레이션 Step by Step델파이 코드 마이그레이션 Step by Step
델파이 코드 마이그레이션 Step by Step
 

More from Bill Kim

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting ComparisonBill Kim
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O NotationBill Kim
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell SortBill Kim
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix SortBill Kim
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick SortBill Kim
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap SortBill Kim
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting SortBill Kim
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection SortBill Kim
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge SortBill Kim
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion SortBill Kim
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble SortBill Kim
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary SearchBill Kim
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)Bill Kim
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVLBill Kim
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search TreeBill Kim
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)Bill Kim
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)Bill Kim
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary TreeBill Kim
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - TreeBill Kim
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - GraphBill Kim
 

More from Bill Kim (20)

[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison[Algorithm] Sorting Comparison
[Algorithm] Sorting Comparison
 
[Algorithm] Big O Notation
[Algorithm] Big O Notation[Algorithm] Big O Notation
[Algorithm] Big O Notation
 
[Algorithm] Shell Sort
[Algorithm] Shell Sort[Algorithm] Shell Sort
[Algorithm] Shell Sort
 
[Algorithm] Radix Sort
[Algorithm] Radix Sort[Algorithm] Radix Sort
[Algorithm] Radix Sort
 
[Algorithm] Quick Sort
[Algorithm] Quick Sort[Algorithm] Quick Sort
[Algorithm] Quick Sort
 
[Algorithm] Heap Sort
[Algorithm] Heap Sort[Algorithm] Heap Sort
[Algorithm] Heap Sort
 
[Algorithm] Counting Sort
[Algorithm] Counting Sort[Algorithm] Counting Sort
[Algorithm] Counting Sort
 
[Algorithm] Selection Sort
[Algorithm] Selection Sort[Algorithm] Selection Sort
[Algorithm] Selection Sort
 
[Algorithm] Merge Sort
[Algorithm] Merge Sort[Algorithm] Merge Sort
[Algorithm] Merge Sort
 
[Algorithm] Insertion Sort
[Algorithm] Insertion Sort[Algorithm] Insertion Sort
[Algorithm] Insertion Sort
 
[Algorithm] Bubble Sort
[Algorithm] Bubble Sort[Algorithm] Bubble Sort
[Algorithm] Bubble Sort
 
[Algorithm] Binary Search
[Algorithm] Binary Search[Algorithm] Binary Search
[Algorithm] Binary Search
 
[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)[Algorithm] Recursive(재귀)
[Algorithm] Recursive(재귀)
 
[Swift] Data Structure - AVL
[Swift] Data Structure - AVL[Swift] Data Structure - AVL
[Swift] Data Structure - AVL
 
[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree[Swift] Data Structure - Binary Search Tree
[Swift] Data Structure - Binary Search Tree
 
[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)[Swift] Data Structure - Graph(BFS)
[Swift] Data Structure - Graph(BFS)
 
[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)[Swift] Data Structure - Graph(DFS)
[Swift] Data Structure - Graph(DFS)
 
[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree[Swift] Data Structure - Binary Tree
[Swift] Data Structure - Binary Tree
 
[Swift] Data Structure - Tree
[Swift] Data Structure - Tree[Swift] Data Structure - Tree
[Swift] Data Structure - Tree
 
[Swift] Data Structure - Graph
[Swift] Data Structure - Graph[Swift] Data Structure - Graph
[Swift] Data Structure - Graph
 

[iOS] MVC, MVP, MVVM

  • 1. MVC, MVP, MVVM Bill Kim(김정훈) | ibillkim@gmail.com [iOS]
  • 2. 목차 •Traditional MVC •Apple’s MVC •Cocoa MVP •Cocoa MVVM •References
  • 4. Traditional MVC •Model : Data(데이터) + Status(상태) + Logic(로직)을 담당 •View : Model을 표현하고 책임지는 객체 •Controller : Model과 View를 연결해주고 관리하는 객체
  • 5. Traditional MVC •장점 : •- Model과 View를 확실하게 분리시켜준다. •- Model 이 어디에도 종속되지 않아 쉽게 모델을 테스트 가능 •단점 : •- Controller가 View에 따라서 깊에 종속되어 테스트가 제한 •- View가 변경되면 Controller도 변경이 필요 •- Controller가 커지고 시간이 지나면 유지보수가 어려움 •- 최신 iOS 개발에는 부적합해보임
  • 7. Apple’s MVC •Model : Data(데이터) + Status(상태) + Logic(로직)을 담당 •View Controller : View가 Model을 표현하는 역할을 주로 •하며 View Controller와 연결되어 대부분 View Controller가 •모든 처리를 담당
  • 8. Apple’s MVC •장점 : •- 전통적인 MVC의 장점과 비슷 •- View와 Controller가 사실상 하나라서 코드 라인이 적다 •- 개발 코드가 적어서 익숙해지면 개발 속도가 빠르다 •단점 : •- 전통적인 MVC의 비해 View와 Contrller가 하나로 합쳐져서 View와 Controller의 역할이 모호하며 Contrller가 좀더 •커질 수 있음 •- 사실상 M + VC의 개념이다 •- View 라이프 사이클 및 테스트를 위한 View 작성이 어려움
  • 11. Cocoa MVP •Model : Data(데이터) + Status(상태) + Logic(로직)을 담당 •(Passive) View : Presenter를 소유하며 액션을 보내주는 객체 •Presenter : Model을 소유하고 모델이 갱신되면 View 에 전달
  • 12. Cocoa MVP •장점 : •- Model 및 Presenter에 거의 책임을 분리하여 View는 간결해짐 •- View와 별개로 비지니스 로직만 테스트 가능 •- 전반적으로 MVC보다 깔끔한 코딩이 가능 •단점 : •- 일반적인 MVC보다 명확한 구분으로 인한 코드가 길다 •- 크지 않은 시스템에서는 비효율적인 구조가 될 수 있다 •- Presenter가 커지면 기존 MVC 처럼 유지보수가 어렵다 •- 경우에 Presenter를 여러개로 분리, 관리하기도 쉽지 않게된다
  • 16. Cocoa MVVM •Model : MVC, MVP에서의 Model와 같음 •View : View Controller가 View의 역할을 함 •View Model : Model을 소유하고 모델을 직접 갱신한다. 갱신에 대한 이벤트 및 액션을 View에 바인딩하여 전달한다.
  • 17. Cocoa MVVM •장점 : •- View Model이 View에 대해서 전혀 모르며 테스트가 용이 •- View 또한 개별적인 테스트 용이 •- MVP보다 깔끔하며 코딩 양이 적다 •- View는 View Model과의 바인딩을 통하여 Model의 값의 변경을 • 쉽게 추적 및 업데이트 할 수 있다. •단점 : •- 기본 MVP의 View보다 MVVM의 View는 책임의 범위가 더 크다 •- Reactive 프레임워크를 주로 사용하기 때문에 경우에 따라 디버깅이 어 려움 •- 간단한 앱의 경우 MVC가 오히려 관리가 편하고 코드가 적음
  • 21. References [1] iOS Architecture Patterns : http://labs.brandi.co.kr/ 2018/02/21/kimjh.html [2] (번역) iOS 아키텍쳐 패턴들 : https://blog.canapio.com/43 [3] [디자인패턴] MVC, MVP, MVVM 비교 : https:// beomy.tistory.com/43 [4] MVC, MVP, MVVM 비교 : https://magi82.github.io/ android-mvc-mvp-mvvm/ [5] 안드로이드의 MVC, MVP, MVVM 종합 안내서 : https:// academy.realm.io/kr/posts/eric-maxwell-mvc-mvp-and- mvvm-on-android/