iOS - MVVM 패턴
Language/Swift 2022. 11. 5. 21:04

MVVM (Model - View- ViewModel) Model 데이터, 네트워크 로직, 비즈니스 로직등을 담으며 데이터를 캡슐화하는 역할을 맡고 있다. MVC 패턴의 Model과 크게 다르지 않다. View 사용자에게 데이터를 보여주거나 UI를 담당한다. Model을 직접 알고 있어서는 안된다. View는 ViewModel로부터 데이터를 가져와서 표현한다. 사용자와 View의 상호작용을 수신하고 이에 대한 처리를 ViewModel에 부탁한다. 보이는 부분에 대한 설정을 스스로 직접한다. ViewModel View로 부터 전달받는 요청을 처리할 로직을 담고 있으며, Model에 변화가 생기면 ViewModel이 View에 notification을 보낸다. (데이터의 변화를 View가 알아챌 수 있도록 ..

iOS - MVC 패턴
Language/Swift 2022. 11. 5. 19:26

MVC (Model - View- Controller) Model : 앱이 가지는 데이터들을 정의하고 비즈니스 로직을 갖고 있다. View : 사용자에게 데이터를 보여주거나 UI를 담당한다. Controller : Model과 View의 중간다리 역할. View로부터 사용자의 action을 받아 Model에게 어떤 작업을 해야 하는지 알려주거나, Model의 데이터 변화를 View에게 전달하여 View를 어떻게 업데이트할지 알려준다. MVC 패턴에서 각 영역의 커뮤니케이션 Controller는 Model과 View에 직접 지시할 수 있지만 Model과 View는 Controller에 직접적으로 알릴 수 없다. View에서 사용자의 action이 발생하였을 때 Controller에 알리는 2가지 방법 1...

iOS - View Controller 생명주기
Language/Swift 2022. 11. 5. 03:26

View Controller의 생명주기 앱은 보통 하나 이상의 화면들로 구성되어 있다. 즉 앱에는 하나 이상의 'View Controller'가 존재하는 것이다. 각각의 뷰 컨트롤러는 생명주기를 갖고 있다. 뷰 컨트롤러는 다음과 같은 생명주기를 가지고 있다. 1. viewDidLoad() : view가 메모리에 로드됐을 때 딱 한번 호출되는 메서드 2. viewWillApear(_:) : view가 화면에 표시되기 전에 호출되는 메서드. view controller가 화면에 나타날 때 마다 반복 실행된다. 3. viewDidAppear(_:) : view가 화면에 나타난 직후에 실행되는 메서드. (화면에 적용될 애니메이션을 그려준다.) 4. viewWillDisappear(_:) : view가 사라지기 ..

iOS - App 생명주기
Language/Swift 2022. 11. 5. 03:07

App 생명주기 App의 실행/종료 및 App이 Foreground/Background 상태에 있을 때, 시스템이 발생시키는 event에 의해 App의 상태가 전환되는 일련의 과정 App 상태 5가지 1. Not Running : 앱이 실행되지 않았거나, 완전히 종료되어 동작하지 않는 상태 2. Inactive : 앱이 실행되면서 foreground에 진입하지만, 어떤한 이벤트도 받지 않는 상태 (앱의 상태 전환 과정에서 잠깐 머무는 단계, alert가 올라와서 앱이 이벤트를 받지 못하는 상황) ex) 전화가 왔을 때, 시스템 메시지가 떴을 때(배터리 부족) 3. Active : 앱이 실행 중이며, foreground에 있고, 이벤트를 받고 있는 상태 4. Background : 앱이 백그라운드에 있으며..

iOS - AppDelegate, SceneDelegate
Language/Swift 2022. 11. 5. 02:53

AppDelegate.swift의 역할 1. AppDelegate클래스를 정의 AppDelegate.swift의 존재로 -> AppDelegate 클래스가 생성됨 -> 이 클래스의 인스턴스인 app delegate(우리 앱의 객체) -> 앱의 상태에 따라 응답하는 콘텐츠가 그려지는 창(window)을 만듬 2. entry point와, 앱의 입력 이벤트를 전달하는 run loop를 생성 Apple이 기본적으로 제공하는 AppDelegate 메소드 func application(_: didFinishLaunchingWithOptions: ) -> Bool : 이 메서드 안에서 application의 setup을 진행 func application(_: configurationForConnecting:opt..

iOS - Delegate 패턴
Language/Swift 2022. 11. 5. 00:35

Delegate란? 어떤 객체가 해야 하는 일을 부분적으로 확장해서 다른 객체가 대신 처리를 한다. Delegate 패턴을 사용하는 이유 객체가 어떤 일을 처리하기에는 부담스러워 처리해야 할 일 중 일부를 다른 객체에게 넘기기 위해서 사용 방법 1. Delegate 채택 (프로토콜 채택) class ViewController: UIViewController, UITableViewDelegate { // ... } 또는 class ViewController: UIViewController { // ... } extension ViewContoller: UITableViewDelegate { } (extension을 사용해서 UITableViewController 채택) 2. 위임자 설정 class View..

iOS - Singleton Pattern
Language/Swift 2022. 11. 1. 16:14

Singleton Pattern 특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형 = 이 클래스에 대한 Instance는 최초 생성될 때 딱 한번만 생성해서 전역에 두고, 그 이후로는 이 Instance만 접근 가능하게 하는 것 = 한 Instance에 어디 클래스에서든 접근 가능 Singleton Class 만드는 방법 1. static 프로퍼티로 Instance 생성하기 class UserInfo { static let shared = UserInfo() var id: String? var password: String? var name: String? } static을 이용해서 Instance를 저장할 프로퍼티를 하나 생성 2. init 함수 접근제어자를 pri..

iOS - GCD(Grand Central Dispatch)
Language/Swift 2022. 11. 1. 15:29

Main Thread - iOS에서 Main Thread는 오직 한 개만 존재 - Interface Thread라고도 불리는데, UI와 관련된 작업은 Main Thread에 붙기 때문 - UI와 관련된 작업은 반드시 Main Thread에서 작성해야 한다. - Main Thread는 Main Queue에서 실행되는데, Main Queue가 Serial Queue라서, 한번에 한 개의 Task밖에 실행하지 못함 - UI를 실행하는 데에 영향을 줄만한(시간이 오래 걸리는) 코드들은 Main Thread에서 실행하면 안되고, Global Thread로 실행시켜 줘야 한다. Global Thread (Background Thread) - iOS에서 Framework들은 모두 Background에서 구동이 된다...