SlideShare a Scribd company logo
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드
뱅크샐러드
박보영
들숨에협업날숨에클린코드
신경꺼도
내 돈 관리
Introduce
뱅크샐러드
Introduce
{
귀여운 스몰 프로젝트 앱
2017. 5
시작
2017. 9
개발 시작
2018. 1
뱅크샐러드
입사
2019. 7
현재
Introduce
{
귀여운 스몰 프로젝트 앱
2017. 5
시작
2017. 9
개발 시작
2018. 1
뱅크샐러드
입사
2019. 7
현재
Index
MVC 탈출기 TDD 도전 Swift 버전업
에서
SwiftLint 까지
🤖 마춤뻡봇에서 SwiftLint까지
SwiftLint 까지
🤖 마춤뻡봇에서
🤖 마춤뻡봇에서 SwiftLint까지
입사 첫 날 첫 번째 슬랙 태그
마춤뻡봇에서 SwiftLint까지
처음 읽을 수 있던 건 그저 오탈자 😓
마춤뻡봇에서 SwiftLint까지
||
#
마춤뻡봇에서 SwiftLint까지
여러분은 어떤 type을 선호하시나요?
마춤뻡봇에서 SwiftLint까지
Case 1 다음 optional binding에 들어갈 guard 문 스타일은?
👉
마춤뻡봇에서 SwiftLint까지
%
&
'
마춤뻡봇에서 SwiftLint까지
동일한 역할을 하는 구문끼리의 convention은 최대한 동일하게
'
마춤뻡봇에서 SwiftLint까지
Case 2 다음 init components 를 표현하는 방식은?
👉
마춤뻡봇에서 SwiftLint까지
%
&
'
마춤뻡봇에서 SwiftLint까지
components, parameters 은 개별로 보기 쉽게,
하나의 line이 너무 길지 않게
+ Code review, split 방식으로 볼 때 가독성 (약 100자)
%
마춤뻡봇에서 SwiftLint까지
간결한 나
명료하고 친절한 나
읽기 쉬운 나
논리적인 나
자유롭고 창의적인 나
()
*
+
,섬세하고 치밀한 나
-
마춤뻡봇에서 SwiftLint까지
() *+, -
⚡
⚡
⚡
⚡ ⚡우리의 코드
우리의 서비스
우리의 제품
,
📈
마춤뻡봇에서 SwiftLint까지
우리의 예술로
팀의 생산성을 극대화한다
(
)
*
+-
마춤뻡봇에서 SwiftLint까지
하지만…
마춤뻡봇에서 SwiftLint까지
Indent 지옥
Watch your
Language!
The road to clean code with SwiftLint
마춤뻡봇에서 SwiftLint까지
SwiftLint
0
🤫
🧹
마춤뻡봇에서 SwiftLint까지
좀 더 비즈니스 로직에 집중할 수 있도록
마춤뻡봇에서 SwiftLint까지
https://github.com/realm/SwiftLint/blob/master/README_KR.md
심지어 한글문서까지
3
MVC 탈출기
MVC 탈출기
MVC 탈출기
에서의 MVC
https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52
by Bohdan Orlov

MVC 탈출기
현실의 Cocoa MVC
https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52
by Bohdan Orlov
에서의 MVC는 꿈
MVC 탈출기
MVC
MVC 탈출기
MVVM
https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52
by Bohdan Orlov
MVC 탈출기
MVC MVVM
UIViewController 라는 개념은
Business Logic 과 View가 혼합되기 쉬움
Cocoa framework 의존도를 최대한 줄이고
Pure 하게 Business Logic을 보존
ViewModel은 View를 몰라도 되는 장점
RxSwift
WHY
?
MVC 탈출기
•적절한 시점의 의존성 주입
•View 자체에 대한 dependency를 최소화
ViewModel
ViewController
/
View
ViewBindable
Model
TDD 도전
BringMyOwnBeer 🍺
https://github.com/fimuxd/BringMyOwnBeer-
TDD 도전
•View = 예쁜 껍데기
•layout(), attribute() 그리고
viewModel과의 binding 만!
ViewController
/
View
TDD 도전
TDD 도전
ViewBindable
•너와 나의 연결고리!
•view에서 발생하는 모든
이벤트, 액션 전달
Tap 이벤트!
맥주 데이터!
또는 ⚠ error
TDD 도전
ViewModel
•View의 분신
•ViewBindable의 구현체
•View의 액션과 이벤트를
모두 정의하는 곳
TDD 도전
Model
•Network 등 연결
•Business Logic만을 전담
TDD 도전
Model이 할 일을 Model이 하기
View가 할 일을 View가 하기
ViewModel이 할 일을 ViewModel이 하기
TDD 도전
View
TDD 도전
View
6
func attribute()
func layout()
TDD 도전
View
👉
ViewBindable
버튼 탭 이벤트!
randomButtonTapped
TDD 도전
👉
ViewBindable
randomButtonTapped
ViewModel
🏭
🧩
🧩
🧩
TDD 도전
👉
ViewBindable
randomButtonTapped
ViewModel
🏭
Model
📡
🤝
🧩
🧩
🧩
TDD 도전
View
ViewBindable ViewMo
🏭
🧩
🧩
🧩
🧩
selectedBeerData
TDD 도전
View
TDD 도전
TDD 도전
TDD 도전
TDD 도전
천리길도 한 걸음부터
시작은 단위의 테스트로 간단하게func
TDD 도전
TDD 도전
(business logic) 단위의 테스트
Model
TDD 도전
Model
•Network 등 연결
•Business Logic만을 전담
TDD 도전
📡 빌드 코드 테스트 코드
🔨
TDD 도전
Dummy data (JSON)
•API 등 규약에 따라 받을 것으로 예상되는 response dummy data 작성
TDD 도전
NetworkStub 생성
TDD 도전
분리한 비즈니스 로직 위주의 테스트 코드 작성
•필요한 Beer 로 JSON decode 잘 되는지
•데이터가 잘 받아와지는지
TDD 도전
분리한 비즈니스 로직 위주의 테스트 코드 작성
•받아온 entity에서 RandomView에 필요한 데이터만 parsing이 잘 되는지
TDD 도전
분리한 비즈니스 로직 위주의 테스트 코드 작성
•각 Unit Test를 모두 반영한 ViewModel 테스트까지!
•Button Tapped 이벤트에 따라 Parsing된 Beer Data가 잘 도달하는지
Swift 버전업
Swift 버전업
Swift 버전업
Swift 4.0 Swift 5.0Swift 3.0
2016-09-13 2017-09-19 2019-03-25
버전을 거듭하는 변화 속에서 클린코드에 대한 고민을 엿볼 수 있습니다
Swift 버전업
SE-0235 Add Result to the Standard Library
•유연성이 부족한 기존의 error-handing 방식(throws, try-catch문)을 개선
•타 언어의 error-handing 방식, 특히 Swift 커뮤니티에서 일반적으로 사용되던 유형
Swift 버전업
변경 전
Swift 버전업
변경 후
•Result에 대한 value와 error를 짝지어 보다 빈틈없는 error-handling 유도
•결과에 대한 조건이 보다 명시적
Summary
Summary
마춤뻡봇에서 SwiftLint까지
“클린코드” 에 대한 훌륭한 정의들은 이미 존재합니다
I like my code to be elegant and efficient. The logic should be straightforward to make it hard for bugs to hide,
the dependencies minimal to ease maintenance, error handling complete according to an articulated strategy,
and performance close to optimal so as not to tempt people to make the code messy with unprincipled
optimizations. Clean code does one thing well.
Bjarne Stroustrup
Clean code can be read, and enhanced by a developer other than its original author. It has unit and
acceptance tests. It has meaningful names. It provides one way rather than many ways for doing one
thing. It has minimal dependencies, which are explicitly defined, and provides a clear and minimal API.
Code should be literate since depending on the language, not all necessary information can be
expressed clearly in code alone.
Dave Thomas
You know you are working on clean code when each routine you read turns out to be pretty
much what you expected. You can call it beautiful code when the code also makes it look like
the language was made for the problem.
Ward Cunningham
SummarySummary
간결하고 읽기 쉬워야 하며, 객체 지향적, 함수명은 직관적,
행동을 명시하는 것이 좋고, 하나의 일을 할 것. 즐겁게 읽히
고 효율적이며 한 가지에 집중하는 코드. 타인이 수정하기
쉬워야 하고 테스트가 가능하며 간결하고 세련된 코드. 중복
이 없고 빠른 추상화로 프로젝트 진행이 신속할 것. 읽고 납
득이 되고 다음 코드로 넘어갈 수 있는 코드. Class, Struct
도 마찬가지, 재사용이 가능해야 하며 testable 한 코드, 목
적이 명시적이고 자연스럽게 읽히며 타인이 읽어도 이해가
쉽고 스스로가 나중에 읽어도 알기 쉬운 그런 유노왓암쌩?
SummarySummary
CULTURE
경쟁에서 최고의 무기는
‘협업’ 이라고 믿습니다.
스타트업 생태계는, 오늘날 기업환경은 생존경쟁 그 자체입니다.
그 치열한 현장에서 레이니스트가 가지고 있는 믿음은 단 하나입니다.
“생존경쟁에서 최고의 무기는 ‘협업’이다.”
SummarySummary
MVC 탈출기 TDD 도전 Swift 버전업
에서
SwiftLint 까지
우리가
읽기 좋은 코드
우리가
수정하기 용이한 코드
우리가
확신할 수 있는 코드
우리 모두
고민하여 개선하는 코드
SummarySummary
모든 고민과 과정에는 우리가 있었다
SummarySummary
클린 코드는
협업을 위한 코드다
🙏
진심으로
감사합니다
Summary
[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드

More Related Content

PDF
SwiftUI와 TCA로 GitHub Search앱 만들기
PDF
Hello, ReactorKit 
PDF
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
PDF
僕がつくった 70個のうちの48個のWebサービス達
PPTX
ElixirでFPGAハードウェアが作れちゃう,かも!!?
PDF
Intel RealSense for ROSConJP20221121.pdf
PDF
例外設計における大罪
PDF
QtとC++でGUIプログラミング
SwiftUI와 TCA로 GitHub Search앱 만들기
Hello, ReactorKit 
広告配信のための高速疎ベクトル検索エンジンの開発@WebDBフォーラム2015 #webdbf2015
僕がつくった 70個のうちの48個のWebサービス達
ElixirでFPGAハードウェアが作れちゃう,かも!!?
Intel RealSense for ROSConJP20221121.pdf
例外設計における大罪
QtとC++でGUIプログラミング

What's hot (20)

PPTX
脱RESTful API設計の提案
PPTX
20171005 告白に学ぶ http status code
PPTX
XAMLで業務アプリがこんなに変わる!デザイン志向による業務アプリの事例紹介
PDF
PHPからgoへの移行で分かったこと
PDF
"Simple Made Easy" Made Easy
PDF
マイクロにしすぎた結果がこれだよ!
PDF
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
PDF
ソフトウェアテスト入門
PDF
事業成長にコミットするエンジニア組織への道のり
PPTX
Qiita Night 足場固めからやるマイクロサービス
PDF
FlutterでBLEを
いい感じにする
PDF
メトリクスによるソフトウェア品質評価・改善および製品品質実態
PDF
マイクロサービス時代の動画配信基Ruby×go=∞
PPTX
OpenTelemetry For Developers
PDF
ソフトウェアテストの変遷と最近の品質管理の方向性
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
PDF
Github - Git Training Slides: Foundations
PDF
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
PPTX
input type = password autocomplete = off は使ってはいけない
PDF
Xbyakの紹介とその周辺
脱RESTful API設計の提案
20171005 告白に学ぶ http status code
XAMLで業務アプリがこんなに変わる!デザイン志向による業務アプリの事例紹介
PHPからgoへの移行で分かったこと
"Simple Made Easy" Made Easy
マイクロにしすぎた結果がこれだよ!
10+ Deploys Per Day: Dev and Ops Cooperation at Flickr
ソフトウェアテスト入門
事業成長にコミットするエンジニア組織への道のり
Qiita Night 足場固めからやるマイクロサービス
FlutterでBLEを
いい感じにする
メトリクスによるソフトウェア品質評価・改善および製品品質実態
マイクロサービス時代の動画配信基Ruby×go=∞
OpenTelemetry For Developers
ソフトウェアテストの変遷と最近の品質管理の方向性
プログラムを高速化する話Ⅱ 〜GPGPU編〜
Github - Git Training Slides: Foundations
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
input type = password autocomplete = off は使ってはいけない
Xbyakの紹介とその周辺
Ad

Similar to [TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드 (20)

PDF
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
PDF
스타트업 인턴 개발자 3달간의 고군분투기 김은향
PDF
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
PDF
CleanSwift 적용기
PPTX
깨끗한 코드 (클린 코드, Clean Code)
PDF
Event Storming(이벤트 스토밍)
PDF
클린 코드 part2
PDF
클린 코드 part1
PDF
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
PPTX
How to implement your dream 20150427
PDF
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
PPTX
Clean code chapter1
PDF
Devon 2011-b-5 효과적인 레거시 코드 다루기
PDF
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
PDF
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
PPTX
[2012 01 28]cleancode 1장
PDF
Chean code chapter 1
PDF
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
PPTX
Code complete chapter 19, 20 organize
PPTX
Clean code chapter9
우아하게 준비하는 테스트와 리팩토링 - PyCon Korea 2018
스타트업 인턴 개발자 3달간의 고군분투기 김은향
[강연] 학생에서 현업 개발자로의 성공적인 변신을 위하여
CleanSwift 적용기
깨끗한 코드 (클린 코드, Clean Code)
Event Storming(이벤트 스토밍)
클린 코드 part2
클린 코드 part1
『풀스택 개발자를 위한 MEAN 스택 입문』 - 미리보기
How to implement your dream 20150427
네이버 오픈소스 세미나 - 나의코드에서 모두의 코드로 UNIST 이한
Clean code chapter1
Devon 2011-b-5 효과적인 레거시 코드 다루기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
[2012 01 28]cleancode 1장
Chean code chapter 1
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
Code complete chapter 19, 20 organize
Clean code chapter9
Ad

More from NAVER Engineering (20)

PDF
React vac pattern
PDF
디자인 시스템에 직방 ZUIX
PDF
진화하는 디자인 시스템(걸음마 편)
PDF
서비스 운영을 위한 디자인시스템 프로젝트
PDF
BPL(Banksalad Product Language) 무야호
PDF
이번 생에 디자인 시스템은 처음이라
PDF
날고 있는 여러 비행기 넘나 들며 정비하기
PDF
쏘카프레임 구축 배경과 과정
PDF
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
PDF
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
PDF
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
PDF
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
PDF
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
PDF
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
PDF
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
PDF
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
PDF
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
PDF
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
PDF
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
PDF
200819 NAVER TECH CONCERT 06_놓치기 쉬운 안드로이드 UI 디테일 살펴보기
React vac pattern
디자인 시스템에 직방 ZUIX
진화하는 디자인 시스템(걸음마 편)
서비스 운영을 위한 디자인시스템 프로젝트
BPL(Banksalad Product Language) 무야호
이번 생에 디자인 시스템은 처음이라
날고 있는 여러 비행기 넘나 들며 정비하기
쏘카프레임 구축 배경과 과정
플랫폼 디자이너 없이 디자인 시스템을 구축하는 프로덕트 디자이너의 우당탕탕 고통 연대기
200820 NAVER TECH CONCERT 15_Code Review is Horse(코드리뷰는 말이야)(feat.Latte)
200819 NAVER TECH CONCERT 03_화려한 코루틴이 내 앱을 감싸네! 코루틴으로 작성해보는 깔끔한 비동기 코드
200819 NAVER TECH CONCERT 10_맥북에서도 아이맥프로에서 빌드하는 것처럼 빌드 속도 빠르게 하기
200819 NAVER TECH CONCERT 08_성능을 고민하는 슬기로운 개발자 생활
200819 NAVER TECH CONCERT 05_모르면 손해보는 Android 디버깅/분석 꿀팁 대방출
200819 NAVER TECH CONCERT 09_Case.xcodeproj - 좋은 동료로 거듭나기 위한 노하우
200820 NAVER TECH CONCERT 14_야 너두 할 수 있어. 비전공자, COBOL 개발자를 거쳐 네이버에서 FE 개발하게 된...
200820 NAVER TECH CONCERT 13_네이버에서 오픈 소스 개발을 통해 성장하는 방법
200820 NAVER TECH CONCERT 12_상반기 네이버 인턴을 돌아보며
200820 NAVER TECH CONCERT 11_빠르게 성장하는 슈퍼루키로 거듭나기
200819 NAVER TECH CONCERT 06_놓치기 쉬운 안드로이드 UI 디테일 살펴보기

[TECHCON 2019: MOBILE - iOS]2.들숨에 협업 날숨에 클린코드