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
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
PPTX
PPTX
Domain Driven Design
PDF
Présentation du DevOps
PDF
Angular Directives | Angular 2 Custom Directives | Angular Tutorial | Angular...
PPTX
Java EE EJB Applications
PPTX
Dekleratif Transaction Yönetimi
PPTX
마이크로 서비스 아키텍쳐 소개 및 구현 방법
Building and deploying microservices with event sourcing, CQRS and Docker (Be...
Domain Driven Design
Présentation du DevOps
Angular Directives | Angular 2 Custom Directives | Angular Tutorial | Angular...
Java EE EJB Applications
Dekleratif Transaction Yönetimi
마이크로 서비스 아키텍쳐 소개 및 구현 방법

What's hot (20)

PDF
Introduction to Firebase from Google
PDF
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
PPTX
ASP.NET Core MVC + Web API with Overview
PDF
Clean architecture
PPTX
Clean architecture
PDF
API Design and WebSocket
PDF
Tizen Overview and Architecture - Seokjae Jeong (Samsung) - Korea Linux Forum...
PPTX
Appium Presentation
PPTX
Project onion - Project Architecture for .Net Core Application
PPTX
React JS - A quick introduction tutorial
PDF
Introduction to React Native
PDF
Intro to react native
PDF
Oracle Cloud Infrastructure – Compute
PPTX
Realtime vs Cloud Firestore
PPTX
Firebase
PDF
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
PDF
The magic of flutter
PPTX
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
PDF
DevSecOps The Evolution of DevOps
Introduction to Firebase from Google
What is Docker | Docker Tutorial for Beginners | Docker Container | DevOps To...
ASP.NET Core MVC + Web API with Overview
Clean architecture
Clean architecture
API Design and WebSocket
Tizen Overview and Architecture - Seokjae Jeong (Samsung) - Korea Linux Forum...
Appium Presentation
Project onion - Project Architecture for .Net Core Application
React JS - A quick introduction tutorial
Introduction to React Native
Intro to react native
Oracle Cloud Infrastructure – Compute
Realtime vs Cloud Firestore
Firebase
React Components Lifecycle | React Tutorial for Beginners | ReactJS Training ...
The magic of flutter
MVC, MVVM, ReactorKit, VIPER를 거쳐 RIB 정착기
DevSecOps The Evolution of DevOps
Ad

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

PPTX
PDF
초보개발자의 TDD 체험기
PPTX
Tdd ver.2
PPTX
Clean code chapter1
PDF
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
PDF
C++ 코드 품질 관리 비법
PDF
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
PPTX
깨끗한 코드 (클린 코드, Clean Code)
PPTX
사내 TDD 도입을 위한 설명 문서
PDF
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
PDF
엔지니어의 학습, 그리고 테스트 코드
PPTX
좋은 개발자 되기
PDF
Chean code chapter 1
PPTX
TDD: Test Driven Development 첫번째 이야기
PDF
Software engineer가 되기 위한 여정
PDF
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
PDF
청강대 특강 - 프로젝트 제대로 해보기
PPTX
NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은
PDF
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
PDF
Learning Unit Testing with Pair Programming
초보개발자의 TDD 체험기
Tdd ver.2
Clean code chapter1
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
C++ 코드 품질 관리 비법
꿀밋업시리즈3탄_Spring Boot를 활용한 마이크로서비스 개발과 페어프로그래밍(TDD)
깨끗한 코드 (클린 코드, Clean Code)
사내 TDD 도입을 위한 설명 문서
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
엔지니어의 학습, 그리고 테스트 코드
좋은 개발자 되기
Chean code chapter 1
TDD: Test Driven Development 첫번째 이야기
Software engineer가 되기 위한 여정
D2 캠퍼스 세미나 - 학생 개발자에서 신입 개발자로 한단계 업그레이드 하기
청강대 특강 - 프로젝트 제대로 해보기
NDC 2017 라이브 프로세스 분석을 통한 효율적인 게임 로직 개발 - 김성은
공사꾼 개발부장 김종찬_페어코딩으로 테스팅 배우기_ausg_20170824
Learning Unit Testing with Pair Programming
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.들숨에 협업 날숨에 클린코드