2. 발표자 소개
- 이선협 / KC
- NHN NEXT
- 파킹스퀘어에서 iOS 개발 담당
- 산업기능요원으로 복무 중
- https://github.com/kciter
- https://medium.com/@kciter
3. 파크히어 소개
- 주차 예약 서비스
- 합리적인 가격으로 내 주차 자리를 보장
- iOS, 안드로이드, 모바일웹, PC웹
- http://www.parkhere.co.kr/
4. 목차
- Why Realm?
- 어떻게해야 Realm을 잘썼다고 소문이 날까?
- 기존 파크히어 로직의 문제점
- 리팩토링
- 하나씩 살펴보기
- 네트워크 로직
- 오브젝트 맵핑
- MVVM
- 결론
- Q & A
5. 목차
- Why Realm?
- 어떻게해야 Realm을 잘썼다고 소문이 날까?
- 기존 파크히어 로직의 문제점
- 리팩토링
- 하나씩 살펴보기
- 네트워크 서비스
- 오브젝트 맵핑
- MVVM
- 결론
- Q & A
- iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용!!!
을 위주로 담았습니다
11. Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
Core Data Realm
데이터 불러오는 코드
12. Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
- Learning Curve가 크다
13. Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
- Learning Curve가 크다
- 별도로 구현해야할 기능들이 Realm에 구현되어 있다
(Notification, Realm().add(_:update:) 등)
14. Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
- Learning Curve가 크다
- 별도로 구현해야할 기능들은 Realm에 있다
(Notification, Realm().add(_:update:) 등)
객체화하여 사용하거나 MagicalRecord같은 라이브러리를 이용해도 좋지만
이미 필요한 기능이 구현되어있고 성능도 더 좋은 Realm을 사용하기로 결정했습
니다.
16. 기존 파크히어 로직
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
Realm 적용 전
17. 기존 파크히어 로직Realm 적용 전
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
AFNetworking SwiftyJSON Callback
- 첫 iOS 앱 제작 경험
- AFNetworking 사용
- SwiftyJSON 라이브러리로 일일이 JSON Parsing
- 데이터 반환을 Callback을 이용함
- MVC Architecture
18. 기존 파크히어 로직Realm 적용 전
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
AFNetworking SwiftyJSON Callback
- 첫 iOS 앱 제작 경험 (경험 미숙으로 잘못된 구조 작성)
- AFNetworking 사용 (Swift와 어울리지 않음)
- SwiftyJSON 라이브러리로 일일이 JSON Parsing (단순 반복 작업, 중복 코드)
- 데이터 반환을 Callback을 이용함 (중복 코드, 클래스간 의존성)
- MVC Architecture (Massive View Controller 문제)
19. 기존 파크히어 로직Realm 적용 전
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
AFNetworking SwiftyJSON Callback
- 첫 iOS 앱 제작 경험
- AFNetworking 사용 (Swift와 어울리지 않음)
- SwiftyJSON 라이브러리로 일일이 JSON Parsing (단순 반복 작업, 중복 코드)
- 데이터 반환을 Callback을 이용함 (중복 코드, 클래스간 의존성)
- MVC Architecture (Massive View Controller 문제)
21. 뷰 진입
서버에
데이터 요청
JSON Parse Realm 쓰기
Realm 읽기 UI 적용
목표
- 클래스간 의존도 낮춤
- 중복 코드를 제거
- 불필요한 노가다성 코드 제거
22. 리팩토링
- 바퀴를 다시 발명하지 말자 (라이브러리 적극 이용)
- MVVM 아키텍처 사용
- AFNetworking대신 Swift와 어울리는 Alamofire 사용
- Model 데이터를 Mapping해주는 라이브러리 사용 (ObjectMapper)
- Reactive 프로그래밍
48. View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
49. View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
50. View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
51. View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
52. View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
Realm에 Response Object를 Write
53. View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
Realm에 Response Object를 Write
Notify
Realm 알림 기능을 통해
데이터 업데이트