SlideShare a Scribd company logo
1 of 26
Download to read offline
Clean Swift 적용기
김지인
목차
프로젝트 적용
2
Clean Swift의 목표
1
사용 후 느낀점
3
Clean Swift 목표
1. 빠른 습득이 필요한 간단한 아키텍쳐가 필요하다.
2. 보편적이고 범용적으로 사용 가능한 아키텍쳐여야 한다.
3. 외부 프레임워크에 의존적이지 않아야 한다.
4. 남이 쓴 코드라도 읽혀야 한다.
5. 작업중인 항목으로 빠르게 돌아갈 수 있어야 한다.
1. 빠른 습득이 필요한 간단한 아키텍쳐가 필요하다.
2. 보편적이고 범용적으로 사용 가능한 아키텍쳐여야 한다.
3. 외부 프레임워크에 의존적이지 않아야 한다.
4. 남이 쓴 코드라도 읽혀야 한다.
5. 작업중인 항목으로 빠르게 돌아갈 수 있어야 한다.
1. 빠른 습득이 필요한 간단한 아키텍쳐가 필요하다.
2. 보편적이고 범용적으로 사용 가능한 아키텍쳐여야 한다.
3. 외부 프레임워크에 의존적이지 않아야 한다.
4. 남이 쓴 코드라도 읽혀야 한다.
5. 작업중인 항목으로 빠르게 돌아갈 수 있어야 한다.
1. 빠른 습득이 필요한 간단한 아키텍쳐가 필요하다.
2. 보편적이고 범용적으로 사용 가능한 아키텍쳐여야 한다.
3. 외부 프레임워크에 의존적이지 않아야 한다.
4. 남이 쓴(에전 내가 쓴) 코드라도 읽혀야 한다.
5. 작업중인 항목으로 빠르게 돌아갈 수 있어야 한다.
1. 빠른 습득이 필요한 간단한 아키텍쳐가 필요하다.
2. 보편적이고 범용적으로 사용 가능한 아키텍쳐여야 한다.
3. 외부 프레임워크에 의존적이지 않아야 한다.
4. 남이 쓴 코드라도 읽혀야 한다.
5. 작업중인 항목으로 빠르게 돌아갈 수 있어야 한다.
프로젝트 적용
프로젝트 구조
SearchBookViewController
SearchBookInteractor
SearchBookPresenter
VIP Cycle
SearchBookRouter
📂 Network
SearchBookWorker
DetailBookViewController
Flow of Control
✨protocol로 느슨하게 의존됨
SearchBookViewController
SearchBookInteractor
SearchBookPresenter
VIP Cycle
SearchBookRouter
📂 Network
SearchBookWorker
DetailBookViewController
Business Logic
Presentation Logic
Display Logic
Payload Model
SearchBookViewController
SearchBookInteractor
SearchBookPresenter
VIP Cycle
SearchBookRouter
📂 Network
SearchBookWorker
DetailBookViewController
Request
ViewModel
Response
SearchBookViewController
SearchBookInteractor
VIP Cycle
Request 전달
Request
SearchBookPresenter
SearchBookInteractor
VIP Cycle
Worker
- DTO -> Model
- Repository 역할
- 그 외 잡다한 일..
📂 Network
SearchBookWorker
Worker가 존재함으로써
VIP Cycle에는 외부의 직접적인 의존성 없음
SearchBookPresenter
SearchBookInteractor
VIP Cycle
📂 Network
SearchBookWorker
1. Worker한테 API 호출 요청하고 데이터 전달받음
2. Response 전달
Response
SearchBookViewController
SearchBookPresenter
VIP Cycle
화면에 보여질 형식으로 Formatting
ViewModel
ViewModel 전달
Presenter에서 전달받은 데이터로
ViewController는 화면 구성
SearchBookViewController
SearchBookInteractor
SearchBookPresenter
VIP Cycle
흐름이 단방향
Q. @MainActor가 왜 붙여졌나요?
Q. @MainActor가 왜 붙여졌나요?
DisplayLogic Protocol에 @MainActor를 붙임으로써
구현된 메소드들이 메인 쓰레드에서 동작하도록 강제 할 수 있다는 장점
휴먼 에러 ⬇ 안정성 ⬆
🚨 메인 쓰레드 처리 하지 않으면 이렇게 에러 발생
Q. 📂 Model의 Book 과
각 Scene의 __BookModels의 차이?
A. 📂 Model의 Book은 VO(Value Object)
BookModels은 Payload 모델
VO인 Book
A. 📂 Model의 Book은 VO(Value Object)
BookModels은 Payload 모델
Q. CleanSwift(VIP) 단방향의 장점은?
1. 흐름이 직관적이다.
2. 책임이 적다.
사용 후 느낀점
장점
1. 러닝커브가 적다
2. 직관적이다
3. 클린 아키텍쳐를 잘 녹여낸 아키텍쳐라고 느껴짐
단점
1. CleanSwift 템플릿 코드가 옛날 smell.. (Segue )
2. 코드 간격이 좀 별로다

More Related Content

Similar to CleanSwift 적용기

PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자Young Min Shin
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨KwangSeob Jeong
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
2022 백엔드 멘토링 자료
2022 백엔드 멘토링 자료2022 백엔드 멘토링 자료
2022 백엔드 멘토링 자료ssuserf875e6
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료지원 정
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
Golang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainGolang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainNAVER Engineering
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능Dexter Jung
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재NAVER D2
 
Let'Swift 2023 Swift Macro, 어디다 쓰죠?
Let'Swift 2023 Swift Macro, 어디다 쓰죠?Let'Swift 2023 Swift Macro, 어디다 쓰죠?
Let'Swift 2023 Swift Macro, 어디다 쓰죠?williciousk
 
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기정민 안
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019devCAT Studio, NEXON
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJSEunYoung Kim
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
DevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer창훈 현
 
React native development
React native developmentReact native development
React native developmentSangSun Park
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)양 한빛
 

Similar to CleanSwift 적용기 (20)

PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자
 
처음 시작하는 라라벨
처음 시작하는 라라벨처음 시작하는 라라벨
처음 시작하는 라라벨
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
2022 백엔드 멘토링 자료
2022 백엔드 멘토링 자료2022 백엔드 멘토링 자료
2022 백엔드 멘토링 자료
 
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
오픈소스 컨트리뷰톤 2020 backend.ai 발표자료
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
Golang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchainGolang+on+analytics+and+blockchain
Golang+on+analytics+and+blockchain
 
자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능자바_웹_개발자를_위한_c#_핵심_기능
자바_웹_개발자를_위한_c#_핵심_기능
 
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
[네이버오픈소스세미나] egjs-view360 개발기 - 김희재
 
Let'Swift 2023 Swift Macro, 어디다 쓰죠?
Let'Swift 2023 Swift Macro, 어디다 쓰죠?Let'Swift 2023 Swift Macro, 어디다 쓰죠?
Let'Swift 2023 Swift Macro, 어디다 쓰죠?
 
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
 
피니엔진
피니엔진피니엔진
피니엔진
 
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
전형규, SilvervineUE4Lua: UE4에서 Lua 사용하기, NDC2019
 
Data-binding AngularJS
Data-binding AngularJSData-binding AngularJS
Data-binding AngularJS
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
DevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer
 
React native development
React native developmentReact native development
React native development
 
앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)앵귤러 첫걸음(Angular for beginers)
앵귤러 첫걸음(Angular for beginers)
 

CleanSwift 적용기