SlideShare a Scribd company logo
1 of 36
Download to read offline
나의 아키텍처 패턴
일대기
지금 사용하고 있는 아키텍쳐 패턴이 있나요?
!
지금 사용하고 있는 아키텍쳐 패턴이 있나요?
!
어떤점이 좋아서 사용하고 계신가요?
"
그동안 사용한 아키텍처들을 정리해보려고 합니다.

(아주 소소..)
MVC MVVM ReactorKit
아주 간단한 화면을 아키텍처별로 구현해봅시다!
장점#
• 뷰컨에서 모든 로직을 처리한다!

• 간단한 화면에서는 로직을 이해하기 쉽다.
단점$
• 뷰컨에서 모든 로직을 처리한다!

=> 뷰컨의 역할이 너무 커져요

• 복잡한 화면이라면?

=> 뷰컨이 무쟈게 커져요!

• 모든 로직이 뷰컨에 의존!
테스트 코드는 어떻게?
또 다른 단점$
내가 배운 테스트 코드… 뷰컨에 어떻게 적용해..?
%
이 함수는 입력, 출력이 명확하니 가능해보이지만
이런 함수는 어떻게해야할까요?
MVVM으로 가보자!
불편..
MVVM
Wiki: MVVM은 GUI 코드로 구현하는-그래픽 사용자 인터페이스(뷰)의 개발을 비즈니스 로직 또는 백
-엔드 로직(모델)로부터 분리시켜서 뷰가 어느 특정한 모델 플랫폼에 종속되지 않도록 해준다.
MVVM
Wiki: MVVM은 GUI 코드로 구현하는-그래픽 사용자 인터페이스(뷰)의 개발을 비즈니스 로직 또는 백
-엔드 로직(모델)로부터 분리시켜서 뷰가 어느 특정한 모델 플랫폼에 종속되지 않도록 해준다.
MVC에서 불편했던 모든 로직이 뷰컨에 의존한다는 것을 해결해줄 수 있다!
똑같이 만들어봅시다.

feat. Rx
입력과 출력을 추상화해서 정의했어요!
입력과 출력을 추상화해서 정의했어요!
화면에서 받는 입력
• 카운트를 올리는 버튼 터치 이벤트
화면에 보여줘야하는 출력
• 카운트를 올리는 버튼 터치 이벤트

• 최대 제한 보다 많이 터치했을 때, Alert 출력
입력에 따른 비즈니스 로직을 정의합니다!
입력에 따른 비즈니스 로직을 정의합니다!



ex.) 버튼을 누를때마다 현재까지의 터치 횟수 출력

ex.) 최대 버튼 횟수보다 많이 눌렀을 경우, 경고 Alert 출력
입력에 따른 로직을 정의합니다!



ex.) 버튼을 누를때마다 현재까지의 터치 횟수 출력

ex.) 최대 버튼 횟수보다 많이 눌렀을 경우, 경고 Alert 출력
로직만 별도로 분리해서 구현 끗!✌
다음! 뷰컨과는 어떻게 연결하죠!?
입력을 뷰모델의 Input에 바인딩합니다!

• 버튼 탭 이벤트를 ViewModel의 Input으로 바인딩
ViewModel.swift
뷰모델의 Output을 뷰에 바인딩합니다!

• touchCount를 titleLabel에 바인딩!

• showErrorAlert은 에러 알럿 출력하는 로직으로 연결
ViewModel.swift
로직을 분리시켜서 뷰모델 생성 완료!
로직을 분리시켜서 뷰모델 생성 완료!

MVC랑 비교하면 뭐가 좋나…?
로직이 분리되니 로직만 테스트를 할 수 있다!!
#
로직을 어떻게 테스트 하지?
원하는 액션을 테스트할 수 있어요!!
ex.) 버튼을 한번 눌렀을 경우 => Label에 1이 보여지는가?, 최대 터치 경고가 안보이는가?
' 버튼을 한번 눌렀을 경우 => ViewModel.input.tapButton에 이벤트 하나 전송!
' Label에 1이 보여지는가? => ViewModel.output.touchCount로 1을 전달 받았는가?

' 최대 터치 경고가 안보이는가? => ViewModel.output.showErrorAlert으로 이벤트가 안왔는가?
ViewModel.swift
로직을 어떻게 테스트 하지? 2222222
원하는 액션을 테스트할 수 있어요!!
ex.) 버튼을 네번 눌렀을 경우 => Label에 3이 보여지는가?, 최대 터치 경고가 보이는가?
' 버튼을 네번 눌렀을 경우 => ViewModel.input.tapButton에 이벤트 4개 전송!
' Label에 3이 보여지는가? => ViewModel.output.touchCount로 1, 2, 3을 전달 받았는가?

' 최대 터치 경고가 보이는가? => ViewModel.output.showErrorAlert으로 이벤트가 왔는가?
ViewModel.swift
아직도 더 익혀봐야할 아키텍처 패턴들은 많다….
아직도 더 익혀봐야할 아키텍처 패턴들은 많다….

패턴마다 장/단점을 잘 파악하여 사용하는 것이 중요하다고 생각합니다!

More Related Content

Similar to adios 2021 oct 유현식 발표자료

[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍NAVER D2
 
iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdfssuser86e2971
 
자바 인터페이스 Java interface
자바 인터페이스 Java interface자바 인터페이스 Java interface
자바 인터페이스 Java interfaceJinhyun Sim
 
[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어NAVER D2
 
04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍entrylabs
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2진상 문
 
2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)
2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)
2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)Sung Woo Park
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command patterndragor0123
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
스크래치로 시작하는 코딩
스크래치로 시작하는 코딩스크래치로 시작하는 코딩
스크래치로 시작하는 코딩Chiwon Song
 
사랑의 '유효성 검사' 재개발
사랑의 '유효성 검사' 재개발사랑의 '유효성 검사' 재개발
사랑의 '유효성 검사' 재개발Seongsil Yoo
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험Lee Sang-Ho
 
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들대원 김
 
안드로이드 멀티스레딩 입문 송형주
안드로이드 멀티스레딩 입문 송형주안드로이드 멀티스레딩 입문 송형주
안드로이드 멀티스레딩 입문 송형주iamhjoo (송형주)
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Ryan Park
 
자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션Choonghyun Yang
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)SangIn Choung
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기Sehun Kim
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버Sukjin Yun
 

Similar to adios 2021 oct 유현식 발표자료 (20)

[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍[112] 실전 스위프트 프로그래밍
[112] 실전 스위프트 프로그래밍
 
iOS Architecture.pdf
iOS Architecture.pdfiOS Architecture.pdf
iOS Architecture.pdf
 
자바 인터페이스 Java interface
자바 인터페이스 Java interface자바 인터페이스 Java interface
자바 인터페이스 Java interface
 
[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어
 
04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍04 생활 속 문제 해결을 위한 엔트리 프로그래밍
04 생활 속 문제 해결을 위한 엔트리 프로그래밍
 
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
Project Anarchy(Vision Engine)으로 게임 툴 만들기! part2
 
2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)
2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)
2016년 #implude 안드로이드 단기속성 - 3. 데이터를 담아주는 변수 & 자료형 (+스낵바)
 
Design pattern study 6 command pattern
Design pattern study 6 command patternDesign pattern study 6 command pattern
Design pattern study 6 command pattern
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
스크래치로 시작하는 코딩
스크래치로 시작하는 코딩스크래치로 시작하는 코딩
스크래치로 시작하는 코딩
 
사랑의 '유효성 검사' 재개발
사랑의 '유효성 검사' 재개발사랑의 '유효성 검사' 재개발
사랑의 '유효성 검사' 재개발
 
모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험모바일 앱 프로그래밍 2015-2019년 기말시험
모바일 앱 프로그래밍 2015-2019년 기말시험
 
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
NDC17. "솔리테어: 덱다웃" 유니티 모바일 테스팅 기법들
 
안드로이드 멀티스레딩 입문 송형주
안드로이드 멀티스레딩 입문 송형주안드로이드 멀티스레딩 입문 송형주
안드로이드 멀티스레딩 입문 송형주
 
Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005Working Effectively With Legacy Code - xp2005
Working Effectively With Legacy Code - xp2005
 
자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션자바병렬프로그래밍 9.gui 애플리케이션
자바병렬프로그래밍 9.gui 애플리케이션
 
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
(편집-테스트카페 발표자료) 1인 QA 수행사례로 발표한 자료 (W프로젝트 사례)
 
초보개발자의 TDD 체험기
초보개발자의 TDD 체험기초보개발자의 TDD 체험기
초보개발자의 TDD 체험기
 
Design pattern 옵저버
Design pattern 옵저버Design pattern 옵저버
Design pattern 옵저버
 
역시 Redux
역시 Redux역시 Redux
역시 Redux
 

adios 2021 oct 유현식 발표자료