Swift viper cover

VIPER: Swift의 iOS개발 아키텍쳐 소개 안드로이드 개발자의 Swift 도전기

Let’Swift는 Swift 개발자들이 만나고, 배우고, 즐기는 컨퍼런스로 총 13개의 세션으로 이뤄졌습니다. Swift 개발자들이 모여 iOS의 넥스트 스텝을 이야기한 행사였습니다. 빠르게 발전하는 언어 Swift에 대한 뜨거운 열의를 엿볼 수 있었던 Let’Swift 행사 동영상을 공유합니다

Swift는 iOS만 국한된 언어가 아니긴 하지만 아직까지 iOS 개발자들의 전유물처럼 느껴지긴 합니다. Swift 개발에 관심있는 안드로이드 개발자분들을 위해 Swift를 사용하면서 Java에 비해 좋았던 부분과 VIPER 아키텍처 적용 사례를 중심으로, 이제는 iOS 개발자가 되고픈 Android 개발자, 유병한님이 강연해 주셨습니다.


Android 개발을 하면서 아쉬웠던 부분

  • Java
    • Null Pointer Exception
    • Getter / Setter
    • Anonymous Class
    • 복잡한 계산로직을 자유자재로, 가독성이 좋게 짜기 힘듦
  • Activity (== ViewController)
    • 너무나 많은 역할을 하는 Activity
    • View, Life Cycle, Navigation, Networking, DB, Business Logic, …
    • 어떤 코드가 어디에 있는지 찾기 힘듦
    • 테스트가 어려운 구조

Swift를 사용하면서 좋았던 부분

  • Optinal Type
    • Optional Chaining
    • Optinal Binding

이런 개발 뉴스를 더 만나보세요


  • Property: Getter / Setter로부터 해방
    • Stored Property
    • Computed Property
  • Closure & Functional: for / if로부터 해방
    • 객체로서의 함수: 함수의 인자로 함수를 넘길 수 있고 결과로 함수를 반환 가능
    • Closure 사용과 타입 추론
  • 실무(투데잇)에서의 Functional
    • 통계 계산 로직에서 적극적으로 사용
    • 대용량 데이터가 아닌 유저 한 사람의 데이터, 그 중에서도 특정 날짜의 데이터를 주로 다룸
    • 스레드 처리만 잘 해주면 사용자 체감 상 크게 문제될 상황은 없음
    • 퍼포먼스도 중요하지만 오류 없고, 가독성이 높고, 수정이 용이한 코드가 필요
    • map, flatMap, filter, reduce, contains …
  • Protocol & Extension

VIPER

  • 좋은 Architecture의 요소
    • Distribution
    • Testability
    • Ease of Use
  • VIPER 구성요소

  • View
    • UIViewController에 해당
    • View Life Cycle: ex) viewDidLoad 함수가 호출되었음을 Presenter에 알림
    • View Event: ex) signUpButton이 클릭되었음을 Presenter에 알림
    • View Control: ex) titleLabel의 텍스트를 바꾸는 방법을 Presenter에 제공
  • Presenter
    • View와 Interactor의 중간 다리 역할
    • View에 대한 비즈니스 로직
      • Life Cycle에 대한 처리
      • View Event에 대한 처리
      • View 업데이트
    • UIKit Independent
  • Interactor
    • Data(Entity)에 대한 비즈니스 로직
  • Entity
    • 네트워크, DB 등의 데이터 모델
    • Realm Object, NSUserDefuatls, Json Data 등
    • Interactor에서 사용
  • Router
    • View 간의 전환
    • VIPER 컴포넌트들의 DI(Dependency Injection)를 담당
  • DataService
    • Network 요청, DB 접근, UserDefaults, 이미지 처리 등 반복되는 코드를 모듈화
    • Interactor가 호출함
  • ViewModel
    • View에 나타나는 데이터와 1:1 매칭
    • Entity가 어떻게 View에 바인딩될지 정의
    • Interactor에서 생성되어 Presenter로 전달
  • VIPER with Swift - Protocol

  • VIPER with Swift - Computed Property

  • 장점
    • 하나의 화면에서 기능 단위로 코드를 명확하게 분리
    • 모든 컴포넌트에 대해 테스트 가능해지는 구조가 됨
    • 분업이 훨씬 수월해짐
  • 단점
    • 간단한 화면과 기능에 대해서도 작성할 코드가 늘어남
  • 향후 해야할 일
    • Code Generator
    • RxSwift, KVO
    • Android에도 적용

Swift로 iOS 앱 개발을 하면서 느낀 점

  • Swift 정말 최고!
  • UI가 있는 어플리케이션을 만든다는 관점에서 큰 동작 원리는 Android와 iOS가 비슷한 것 같음
  • iOS에도 문제가 많다고 하지만 안드로이드에 비할 바는 아닌 것 같음

발표 슬라이드는 아래를 참고해주세요.

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.

Realm Team

Realm의 미션은 더 나은 앱을 빠르게 개발할 수 있도록 돕는 것입니다. 이를 위해 저희는 개발자들이 실시간 협업, 가상 현실, 라이브 데이터 동기화, 오프라인 경험, 메시징 등 정교하고 강력한 기능을 쉽게 개발할 수 있도록 하는 개발 도구와 플랫폼을 제공하고 있습니다.

저희는 모바일 인터넷이 수많은 사용자와 보다 많은 디바이스가 속한 개방형 네트워크와 이들 간의 실시간 상호 작용으로 진화할 것이라고 믿으며, 개발자가 이같은 방향으로 발전할 수 있도록 돕기 위해 저희 제품들을 개발하고 있습니다.

4 design patterns for a RESTless mobile integration »

close