SlideShare a Scribd company logo
1 of 14
Download to read offline
VIPER
Bill Kim(김정훈) | ibillkim@gmail.com
[iOS]
목차
•VIPER
•VIPER 장단점
•MV(X) 와의 비교
•VIPER 자동생성기
•Sample Code
•References
VIPER
VIPER
VIPER
•View : Presenter를 소유하여 요청을 받으며 액션을 전달하는
객체
•Interactor : Entity 모델 객체를 조작하고 비지니스 로직 관리
•Presenter : Interactor로부터 데이터를 가져오고 View로 데
이터를 언제 보여줄지를 결정하는 객체
•Entity : Model 객체
•Router(Wireframe) : Persenter와 달리 View를 어떻게 보
여줄지(seques)를 결정하는 객체
VIPER 장단점
•장점 :
•- 전형적인 MV(X)보다 역할 및 책임 분담이 명확하다
•- 명확한 분리로 인한 유닛 테스트가 용이하다
•- 한번 잘 설계하면 재활용이 가능하며 코드 이해가 쉽다
•- 큰 프로젝트에서 여러명의 개발자가 공동 작업하기에 좋다
•단점 :
•- 많은 역할 분담으로 인하여 객체 및 코드가 많다
•- 역활과 분리로 인하여 서로간의 인터페이스가 많아 유지보수 비용이 더
많이 든다
•- 인터페이스 간의 응집도와 연관성이 매우 높다
•- 초기 기획이 명확하지 않으면 적용하기가 어렵다
MV(X) 와의 비교
•- Model(Data Interaction) 로직은 빈 데이터 구조로써
Enities와 함께 Interactor에 이동된다
•- Controller/Presenter/View Model 이 Presenter로 이
동하는 UI 표시는 책임을 지지만 데이터를 변경할 능력은 없다
•- VIPER는 명시적으로 Router에 의해 결정된 네이게이션 책
임을 해결한 첫 패턴이다
•- VIPER는 책임에 대한 분리가 명확하기에 MV(X)와 달리 설
계자에 따라서 효과가 극대화될 수 있다
VIPER 자동생성기
•아래의 링크들을 통하여 VIPER 아키텍처 구조를 자동으로 생성할 수 있다
•* VIPER gen :
•https://github.com/pepibumur/viper-module-generator?
utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20po
st
•* Generamba :
•https://github.com/rambler-ios/Generamba?
utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20po
st
•* Boa :
•https://medium.com/@Supercharge/generating-viper-modules-with-
boa-e8d9f090966b?
utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20po
st#.nry31apor
Sample Code : VIPER
Sample Code : VIPER
Sample Code : VIPER
References
References
[1] iOS Architecture Patterns : http://labs.brandi.co.kr/
2018/02/21/kimjh.html
[2] iOS Architecture Patterns : https://medium.com/ios-os-
x-development/ios-architecture-patterns-ecba4c38de52
[3] (번역) 언제 VIPER를 사용할까? : https://
beomy.tistory.com/43
[4] MVC, MVP, MVVM 비교 : https://blog.canapio.com/48
[5] From mvc to viper : https://www.slideshare.net/
kprofic/from-mvc-to-viper?
utm_source=swifting.io&utm_medium=web&utm_campaign
=blog%20post
Thank you!

More Related Content

Similar to [iOS] VIPER

(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
Jeongsang Baek
 

Similar to [iOS] VIPER (20)

Spring Framework - Inversion of Control Container
Spring Framework - Inversion of Control ContainerSpring Framework - Inversion of Control Container
Spring Framework - Inversion of Control Container
 
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
(GameTech2015) Live Operation by Adbrix의 Node.js와 MongoDB를 이용한 멀티테넌트 인프라 구축사례
 
웹:앱 기술 동향
웹:앱 기술 동향웹:앱 기술 동향
웹:앱 기술 동향
 
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
 
꿀밋업1탄_왜_마이크로서비스인가
꿀밋업1탄_왜_마이크로서비스인가꿀밋업1탄_왜_마이크로서비스인가
꿀밋업1탄_왜_마이크로서비스인가
 
BIM 기반 통합 설계 품질검토 시스템 개발
BIM 기반 통합 설계 품질검토 시스템 개발BIM 기반 통합 설계 품질검토 시스템 개발
BIM 기반 통합 설계 품질검토 시스템 개발
 
React native development
React native developmentReact native development
React native development
 
Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3Event storming based msa training commerce example add_handson_v3
Event storming based msa training commerce example add_handson_v3
 
Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.Angular는 사실 어렵지 않습니다.
Angular는 사실 어렵지 않습니다.
 
DDD Start Ch#3
DDD Start Ch#3DDD Start Ch#3
DDD Start Ch#3
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
Lost practice : Requirement Analysis
Lost practice : Requirement AnalysisLost practice : Requirement Analysis
Lost practice : Requirement Analysis
 
[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
 
Javascript 생태계
Javascript 생태계Javascript 생태계
Javascript 생태계
 
꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결
꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결
꿀밋업2탄_도메인 모델에 따른 데이터 분리 저장과 API 연결
 
[OpenInfra Days Korea 2018] (Track 2) Microservice Architecture, DevOps 그리고 5...
[OpenInfra Days Korea 2018] (Track 2) Microservice Architecture, DevOps 그리고 5...[OpenInfra Days Korea 2018] (Track 2) Microservice Architecture, DevOps 그리고 5...
[OpenInfra Days Korea 2018] (Track 2) Microservice Architecture, DevOps 그리고 5...
 
[iOS] MVC, MVP, MVVM
[iOS] MVC, MVP, MVVM[iOS] MVC, MVP, MVVM
[iOS] MVC, MVP, MVVM
 
애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축애플리케이션 최적화를 위한 컨테이너 인프라 구축
애플리케이션 최적화를 위한 컨테이너 인프라 구축
 
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
 

More from Bill 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] VIPER

  • 1. VIPER Bill Kim(김정훈) | ibillkim@gmail.com [iOS]
  • 2. 목차 •VIPER •VIPER 장단점 •MV(X) 와의 비교 •VIPER 자동생성기 •Sample Code •References
  • 5. VIPER •View : Presenter를 소유하여 요청을 받으며 액션을 전달하는 객체 •Interactor : Entity 모델 객체를 조작하고 비지니스 로직 관리 •Presenter : Interactor로부터 데이터를 가져오고 View로 데 이터를 언제 보여줄지를 결정하는 객체 •Entity : Model 객체 •Router(Wireframe) : Persenter와 달리 View를 어떻게 보 여줄지(seques)를 결정하는 객체
  • 6. VIPER 장단점 •장점 : •- 전형적인 MV(X)보다 역할 및 책임 분담이 명확하다 •- 명확한 분리로 인한 유닛 테스트가 용이하다 •- 한번 잘 설계하면 재활용이 가능하며 코드 이해가 쉽다 •- 큰 프로젝트에서 여러명의 개발자가 공동 작업하기에 좋다 •단점 : •- 많은 역할 분담으로 인하여 객체 및 코드가 많다 •- 역활과 분리로 인하여 서로간의 인터페이스가 많아 유지보수 비용이 더 많이 든다 •- 인터페이스 간의 응집도와 연관성이 매우 높다 •- 초기 기획이 명확하지 않으면 적용하기가 어렵다
  • 7. MV(X) 와의 비교 •- Model(Data Interaction) 로직은 빈 데이터 구조로써 Enities와 함께 Interactor에 이동된다 •- Controller/Presenter/View Model 이 Presenter로 이 동하는 UI 표시는 책임을 지지만 데이터를 변경할 능력은 없다 •- VIPER는 명시적으로 Router에 의해 결정된 네이게이션 책 임을 해결한 첫 패턴이다 •- VIPER는 책임에 대한 분리가 명확하기에 MV(X)와 달리 설 계자에 따라서 효과가 극대화될 수 있다
  • 8. VIPER 자동생성기 •아래의 링크들을 통하여 VIPER 아키텍처 구조를 자동으로 생성할 수 있다 •* VIPER gen : •https://github.com/pepibumur/viper-module-generator? utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20po st •* Generamba : •https://github.com/rambler-ios/Generamba? utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20po st •* Boa : •https://medium.com/@Supercharge/generating-viper-modules-with- boa-e8d9f090966b? utm_source=swifting.io&utm_medium=web&utm_campaign=blog%20po st#.nry31apor
  • 10. Sample Code : VIPER
  • 11. Sample Code : VIPER
  • 13. References [1] iOS Architecture Patterns : http://labs.brandi.co.kr/ 2018/02/21/kimjh.html [2] iOS Architecture Patterns : https://medium.com/ios-os- x-development/ios-architecture-patterns-ecba4c38de52 [3] (번역) 언제 VIPER를 사용할까? : https:// beomy.tistory.com/43 [4] MVC, MVP, MVVM 비교 : https://blog.canapio.com/48 [5] From mvc to viper : https://www.slideshare.net/ kprofic/from-mvc-to-viper? utm_source=swifting.io&utm_medium=web&utm_campaign =blog%20post