[iOS] App Life Cycle(3) - AppDelegate
2022. 11. 1. 21:06
iOS/iOS
Xcode에서 프로젝트를 생성하게 되면, AppDelegate.Swift 파일에 아래와 같이 선언된 것을 볼수가 있다. @UIApplicationMain//Swift 5.3이전 class AppDelegate: UIResponder, UIApplicationDelegate { ... } @main//Swift 5.3이전 class AppDelegate: UIResponder, UIApplicationDelegate { ... } 우선, 이 @UIApplicationMain과 @main에 대해서 알아보자! 기존의 C언어를 사용해 봤다면, main 함수를 통해 앱의 시작점을 알렸었던 경험이 있을 것이다. 하지만, Xcode에서 iOS 프로젝트를 생성하게 되면, main함수를 찾아볼수가 없는데, 이는, UIK..
[iOS] App Life Cycle(2) - App based VS. Scene based
2022. 11. 1. 20:07
iOS/iOS
지난 포스팅에서 알아보았듯이 MultipleWindow를 지원하면서 SceneDelegate가 등장하였고, AppDelegate UI LifeCycle을 관리하지 않게 되었다. 이에 따라 Life Cycle도 App-Based Life Cycle 에서 Scene-Based Life Cycle로 바뀌게된다. App State Life Cycle에 대해 알아보기 이전에 먼저 App State들은 무엇이 있는지 알아보자! Not Running : 앱이 아예 실행되지 않았거나, 시스템에 의해 완전히 종료된 상태 Inactive : 앱이 실행중이거나 아무 이벤트를 받지 못하는 상태 앱을 실행중에 전화가 왔거나, 메시지, 알림같은 interrupt 발생시 다른 상태로 넘어가기 전에 앱은 이상태를 거치게된다 Acti..
[iOS] App Life Cycle(1) - Multiple Windows in iOS
2022. 10. 19. 00:22
iOS/iOS
Apple은 WWDC19를 통해 iOS13이후부터 Multiple Window를 제공하게 되었다. Multiple Window를 위해 Scene이라는 개념이 추가가 되면서, 기존의 AppDelegate도 변하게 되고, SceneDelegate가 새롭게 등장하게 되었다. 앞으로 여러 포스팅에 걸쳐서 Application의 Life Cycle을 알아보고자 한다. 우선, 이번 포스팅에서는 UIWindow와 UIScene의 개념을 간략히 알아보고, 어떤 방식으로 Multiple Window를 제공하는지 알아보고자 한다. UIWindow UIWindow란, View들을 담고 있는 컨테이너이다. 특별한 경우를 제외하고선, 하나의 Window만 생성하고, View가 바뀔 시에는 Window가 바뀌는 것이 아닌! Wi..
[Swift] KVO, Delegate and Notification
2022. 10. 8. 22:07
iOS/Swift
KVO Delegate Notification 앞서 3개의 post에서 KVO, Delegate, Notification에 대해서 알아보았다. 실제로 Applicatoin에서, 객체간의 interaction이 필요한 경우가 많다. 하지만 interaction을 위해 객체간의 종속되는 것은 "재사용성", "독립적인 기능요소"로의 가치를 잃게 된다! 예시로, ViewController는 특정 View를 관리하는 것이 아닌, 다른 ViewController에 종속되어 동작하는 것은 독립적인 기능요소의 가치를 잃게 된다. 이러한 interaction을 위해 excessive coupling(과도한 결합) = 종속 없이 event를 전달 및 처리 하기 위해 3가지 pattern을 사용한다. 이번 포스트에서 이 3..
[Swift] Notification
2022. 10. 8. 21:03
iOS/Swift
Notifications은 Cocoa의 Observer pattern중 하나로, broadcast 방식으로 여러 객체에 이벤트를 전달 할 수 있다. 동작부터 알아보자면 event를 보내는 Object는 Notification 객체를 만들어 post한다 이 Notification 객체는 NotificationCenter로 가게 된다. 해당 event를 받고 싶은 객체는 Observer를 통해 NotificationCenter에 등록한다. NotificationCenter는 등록된 객체에게 broadcast방식으로 Notificatoin 객체를 보낸다. Notification Object 앞서 살펴보았듯이, event를 보내기 위해서는 Notification 객체를 생성 해야 한다. Notification ..
[Swift] Delegate
2022. 10. 7. 17:22
iOS/Swift
Delegate란, 한국말로 위임이란 뜻이며, 한 object가 해야되는 행위를 다른 object로 위임(대신)하는 pattern 이다. iOS에서 delegate는 protocol로 구현이 된다. 우선, 이 protocol에 대해 간단히 살펴 보자 Protocol protocol은 정의를 하고 제시를 할 뿐 기능을 구현하지는 않는 하나의 타입이다. struct나, class는 이를 상속하는 것이 아닌 채택한다는 표현을 쓴다. 쉽게 말하자면, Protocol은 하나의 행동 규범 혹은 틀 이라고 생각하면 된다. 음식점을 가지고 예시를 들어보자! 기본적으로 음식점을 차리기 위해선 요리를 해야한다. 또한, 음식도 팔아야 한다 즉, 음식점을 protocol로 생각하자면, 요리를한다, 음식을 판다 ... 등등의 ..
[Swift] KVO (Key-Value-Observing)
2022. 10. 6. 17:20
iOS/Swift
KVO란, Object의 properties의 변경을 다른 Object에 알리기 위한 Cocoa programming pattern NSObject를 상속한 Object에서만 KVO 사용가능하다. 또한, NSObject에 KVO를 위한 기본적인 methods가 잘 구현되어 있기 때문에 Override 할 필요가 없다. KVO in Swift 우선, KVO를 사용하기 위해 NSObject를 상속 하여야 한다. 또한, Obeserve(관찰)할 property에 대해 @objc attribute와 dynamic modifier를 추가한다. class Address: NSObject { @objc dynamic var cityName: String init(cityName: String) { ... } } cl..
[Swift] KVC (Key-Value-Coding)
2022. 10. 5. 21:43
iOS/Swift
KVC란, Key-Value-Coding을 의미하며, 캡슐화된 객체에서 getter나 setter를 통한 직접 접근이 아닌 Key, KeyPath값을 통해 인스턴스의 value(property)에간접적으로 접근할 수 있도록 NSKeyValueCoding protocol에 의해 제공되는 machanism KVC에서 핵심인 Key와 KeyPath에 대해 알아보자 Key 우선 Key는 위에서 보았듯이, value(property)에 간접적으로 접근 할 수 있게 해준다. key값은 property의 이름과 같아야하며, ASCII 코드의 String이다 하지만, Key의 경우에 Objective-C의 문법으로 Swift에서 사용할 경우 Objective-C의 최상위 Root Class인 NSObject를 상속 받..
[Swift] Subscript
2022. 10. 5. 15:53
iOS/Swift
Subscript란, Collection, List, Sequence 등 집합의 특정 member elements에 간단하게 접근할 수 있는 Type properties subscript 사용으로 추가적인 methods 없이 특정 값에 할당하거나 가져올 수 있다. Array의 경우 []안의 index를 통해 member elements 접근 → 즉 index는 subsrcript var arr: [String] = ["가", "나", "다", "라"] arr[1] //get arr[1] = "가나다" //set → 실제 Array안에 선언되어 있는 subscript subscript(index: Int) -> Element { get set } Dictionary의 경우도 마찬가지로 key를 parame..