뱅크샐러드
박보영
들숨에협업날숨에클린코드
신경꺼도
내 돈 관리
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.들숨에 협업 날숨에 클린코드

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