본문 바로가기
iOS/DSC Study Session

DSC PNU #2 - 2주차 iOS 세션 노트

by HaningYa 2020. 5. 14.
728x90

week2

 

 

DSC PNU 2기 iOS 세션 계획

부산대학교 - 지원하기 DSC Pusan National 멤버 지원하기 "대학 생활을 Google 개발자 프로그램과 함께!" sites.google.com 대상 : iOS 를 배우고 싶은 전공, 비전공학생들 조건 : 맥 필요 스터디원 아무도 없��

haningya.tistory.com

 

 

DSC PNU #1 - iOS 세션 시작전 준비 (preparation before iOS Study)

Xcode 설치 // Install Xcode 용량이 꽤 커서 (7~8GB) 미리 설치를 해야 될 것 같습니다. 이미 설치하신 분들은 고대로 토욜 오전 10시에 뵙겠습니다. I think we should install xcode inadvacne of sesseion cau..

haningya.tistory.com

 

DSC PNU #1 - 1주차 iOS 세션 노트

DSC PNU 2기 iOS 세션 계획 부산대학교 - 지원하기 DSC Pusan National 멤버 지원하기 "대학 생활을 Google 개발자 프로그램과 함께!" sites.google.com 대상 : iOS 를 배우고 싶은 전공, 비전공학생들 조건 : 맥..

haningya.tistory.com

이전까지 배운 내용

  • 개발환경 세팅
  • iOS 운영체제 특징
  • Xcode 프로젝트 종류 및 생성 방법
  • Xcode Single View app 프로젝트 기본 구성 파일
  • info.plist
  • Autolayout
  • Hello world 앱
  • 코드로 constraint 주는법
  • 화면 전환 방법 : push, present

이론

[참고영상 : 40분째부터 ]

 

iOS 애플리케이션 아키텍처 : MVVM, MVC, VIPER 전격 비교

MVVM, MVC, VIPER 등 수많은 아키텍처 디자인 방법 중 어떤 것이 가장 좋을까요? 좋은 iOS 앱 아키텍처를 구성에 어떤 요소가 필요한지 알아봅니다.

academy.realm.io

[마이리얼 트립 MVVM 글]

 

마이리얼트립에서 사용하는 iOS 개발 아키텍처

MVVM을 사용하면서 데이터의 관리와 디자인요소를 어떻게 처리하는가

medium.com

[아키텍처 패턴]

 

  • 아키텍쳐 패턴이란
    : 주어진 문맥 안에서 소프트웨어 아키텍처의 공통적인 발생 문제에 대한 일반적인, 재사용 가능한 해결책
      소프트웨어 디자인 패턴과 비슷하지만 더 넓은 범위에 속한다.

  • 아키텍쳐 패턴이 왜 필요할까
    : 아키텍처 패턴에 기반 개발은 앱을 위한 견고한 기반을 구축하는데 도움이된다.
    초기개발 : MVC --> 그 후 수많은 업데이트, 새로운 Feature 추가 개발, 버그 수정, 새로운 개발자 영입에 따른 통일되지 않은 컨벤션
    --> 코드가 난잡해지고 손대기 힘들어 진다.

[출처글]

 

An Overview of Architectural Design Patterns for iOS Developers - DZone Mobile

This article reviews the main architectural design patterns used when developing iOS mobile applications to provide a solid foundation for a better app.

dzone.com


MVC

MVC

  • 기본이 되는 패턴이다.
  • 간단한 구조의 애플리케이션에 적합하다.
  • Apple 이 처음 정의한 아키텍쳐 컨셉이다.
  • Model : 비즈니스 로직을 가지고있는 여러가지 클래스들의 모음이다.(비즈니스 모델 + 데이터 모델)
    모델들은 데이터들이 바뀌거나 수정될 rule을 정의한다.
  • View : 사용자가 상호작용하는 user interface이다.
    controller에게 받은 데이터를 display 한다.
  • Controller : model 과 view 사이 중재자이다. model 이 이떻게 view에 표시될지 결정한다. iOS 에서는 UIVIewController 라고 부른다. 주요 기능은 사용자로 부터 View를 통해 입력을 받고 데이터를 model 로 보내는 것이다. 그리고 그 결과를 다시 View 에 표시한다.

MVP

MVP

  • Model : MVC 의 model 과 동일하다.
  • View : MVP 의 View 와 Controller 둘다로 구성된다. View는 유저 인터렉션을 Presenter로 전달한다.
  • Presenter : MVC에서 controller 가 Presenter로 바뀐 것이다, Presenter는 View 를 대신하여 모든 사용자 이벤트 처리를 책임진다. Model 계층과 통신하여 데이터를 UI 에 맞는 형식으로 바꾸어 표시한다.

MVVM

MVVM

  • MVC 패턴의 발전된 버전이다.
  • View 와 Controller가 MVVM 에서는 View 와 ViewModel 로 바뀐다. (Presentation logic 을 담당한다.)
  • ViewModel 은 Model에서 수정된 부분을 자동으로 자신에게 반영한다. 그리고 View는 ViewModel 밀접하게 연결되어 Model 과 ViewModel 사이 통신이 쉽게 되어있다.
  • 그 결과 ViewController의 역할이 간단해 지고 가독성과 유지 보수가 쉬워진다.
  • Data-Binding in MVVM : MVVM 에서 ViewModel 과 Model 이 어떠한 reference 도 없는데 어떻게 밀접하게 연결된다는 걸까? 답은 데이터 바인딩이다. UI 요소들을 ViewModel의 observable properties에 연결 시키는 것이다.
  • iOS는 데이터 바인딩을 기본적으로 제공하지 않지만 나 ReactiveCocoa, Bind같은 라이브러리가 있다.
 

DeclarativeHub/Bond

A Swift binding framework. Contribute to DeclarativeHub/Bond development by creating an account on GitHub.

github.com

 

 

 

ReactiveCocoa/ReactiveCocoa

Reactive extensions to Cocoa frameworks, built on top of ReactiveSwift - ReactiveCocoa/ReactiveCocoa

github.com

 

markohlebar/BIND

Data Binding and MVVM for iOS. Contribute to markohlebar/BIND development by creating an account on GitHub.

github.com


Viper

Viper

  • Viper는 iOS 에서 클린 아키텍쳐 접근 방식을 따르는 아키텍쳐 패턴이다.
  • Viper는 distinct 하고 각각의 책임이 있는 레이어들로 애플리케이션을 나눈다.
  • View : presenter에 의해 대리된 input을 View 에 표시한다.
  • Interactor : 비즈니스 로직 부분
  • Presenter : View 로부터 입력을 받고 Interactor에게 데이터를 요청한다. Interactor로 부터 데이터를 받아 view logic 을 적용하여 View 에게 데이터를 표시하도록 한다.
  • Entity : VIPER에서 가장 작은 요소이다. 여러 데이터 타입들의 encapsulate를 담당한다. 
    기본 model 객체를 가지고 있다.
  • Router : 스크린 간의 navigation을 담당한다. 또한 navigation의 순서를 정한다.
  • VIPER는 Single Repository principle 을 따른다.
  • Router를 통해 스크린간 이동에 일어나는 문제점들을 해결했다.
  • VIPER에는 책임 소재가 분명하기 때문에 팀간 개발에 있어서 일어나는 conflict 를 줄여준다.
  • separation이 잘되 있기 때문에 TDD 를 더 쉽게 해준다.

다양한 아키텍쳐 패턴 예제

https://github.com/onmyway133/awesome-ios-architecture

 

onmyway133/awesome-ios-architecture

:japanese_castle: Better ways to structure iOS apps - onmyway133/awesome-ios-architecture

github.com

 


실습 : 카카오톡 첫화면 만들기

[UITableView]

  • UITableview 특징
  • UITableView 구현
  • 카카오톡에서 UITableView 사용 하는 View 구현 (친구 리스트)

 

728x90

댓글