안녕하세요! 지우개입니다
최근에는 면접 준비를 하다가 새로 깨달음을 얻었어요
그리고 곧 새 프로젝트를 시작했는데
기능 하나, UI 하나하나를 새로 개발할 때마다
궁금한게 샘물처럼 퐁퐁 솟아나더라구요?
그동안은 좀 넓고 얕게 알아보고 개발했다면,
이제부터는 알고 싶은 것을 하나하나 깊게 정리해보고자
<탈탈 털기>라는 이름의 블로그 글을 꾸준히 쓰기로 결심했습니다 ㅋㅋ
궁금해요!
알아보고 싶었던 부분은 바로 SceneDelegate의
window.makeKeyAndVisible() 부분입니다.
(분명 배웠던 것 같은데.. 저게 어떤 역할을 할까? 라고 스스로 물어보면 대답할 수가 없더라구요 😓)
먼저 이 코드가 쓰이는 부분인 SceneDelegate의 역할부터 알아보겠습니다.
SceneDelegate란?
SceneDelegate?
SceneDelegate는 iOS 13 이후에 생겼습니다. (왜 생겼는지는 밑에 나와요!)
이 녀석의 역할은 UI 생명주기에 관한 이벤트를 처리하는 거예요.
앱을 실행하면 UIKit은 일반적으로 UIScene의 서브클래스인 UIWindowScene 객체를 생성해요.
이 UIWindowScene 객체는 UI의 State를 가지고 있습니다!
UI의 상황에 따른 이벤트 처리를 위해 UIWindowSceneDelegate 프로토콜을 만들었고,
구체적인 내용을 SceneDelegate에 프로토콜 채택을 통해 정의할 수 있어요.
AppDelegate & SceneDelegate
AppDelegate와 SceneDelegate의 관계는 어떨까요?
원래 iOS 13 이전까지는 AppDelegate에서 앱의 생명주기와 UI 생명주기를 모두 처리했어요.
그런데! (두둥)
iOS 13에서 iPadOS가 등장하면서, iPadOS의 멀티 윈도우가 등장합니다.
(아이패드에서 두 가지 앱을 동시에 양 옆에 띄워두고 번갈아가며 작업하는 것, 한번쯤 보거나 직접 해보신 적 있으시죠??)
기존 AppDelegate에서는 [앱 프로세스 상태(런치, 종료)]와 [앱의 생명주기(백그라운드, 포그라운드)] 두 가지를 담당했었습니다.
그런데 iPadOS의 등장으로, 앱 프로세스는 하나인데 여러 Scene을 동시에 사용할 수 있게 된 거예요.
그래서 개발자들은 이걸 따로 관리해줄 객체가 필요하다는 생각이 들기 시작했습니다.그 생각에서 도입된 것이 바로 SceneDelegate!!
SceneDelegate에서 Scene의 생성/종료 트리거를 AppDelegate에게 알려주면서
AppDelegate가 앱의 생성/종료 시점을 통제할 수 있게 됩니다.
자 여기서 또 궁금한 점이 생깁니다.
그렇다면 Scene이란 건 대체 뭘까요?
Scene이란?
Scene: 앱의 UI 중 하나의 인스턴스를 나타내는 객체
Scene에는 UI중 하나의 인스턴스, 즉 화면 하나를 나타내는 window와 viewController가 들어있습니다.
Scene들은 UIKit과 앱 사이의 상호작용을 조정하는 데 사용하는데요,
이들은 같은 메모리와 앱 프로세스 공간을 공유하면서 동시에 실행됩니다.
하나의 앱에 여러 개의 Scene이 활성화 될 수 있겠죠? 또 동시에 활성화되는 것도 가능할겁니다.
맨 처음에 들었던 궁금증에 점점 다가가는 기분이 드는데요그렇다면 과연!! Window라는 녀석은 뭐하는 녀석일까요?!
Window란?
UIWindow : 앱의 UI를 담는 배경 & 이벤트를 뷰에 전달하는 객체
윈도우는 뷰들을 담는 컨테이너다!! 라고 많이들 부르는 것 같습니다.
그냥 한 개 이상의 뷰를 포함할 수 있는, 빈 컨테이너! 라고 생각하는 게 편할 듯 해요
(새로운 콘텐츠를 보여주기 위해서는 윈도우를 교체하는 대신, 그냥 뷰를 교체)
윈도우는
뷰컨트롤러와 함께 동작하면서,
이벤트를 처리하거나 앱 운영에 필수적인 작업들을 수행합니다.
또, 스토리보드로 구현할 경우에는 Xcode에서 앱의 메인 윈도우를 자동으로 제공합니다.
스토리보드로 구현하지 않고 코드로 UI를 구성할 경우, 윈도우를 직접 생성해야 합니다.
드디어 왔습니다!!오늘의 목표였던, window.makeKeyAndVisible()!!!
window.makeKeyAndVisible()
makeKeyAndVisible() | Apple Developer Documentation
func makeKeyAndVisible() : window를 보여주고 window를 key window로 만든다.
사실 말 그대로의 역할을 하는 녀석입니다.현재의 window를 보여주고, 같거나 더 낮은 레벨에 있는 다른 윈도우들보다 맨 앞에 위치시키는 메소드예요.
윈도우를 그냥 보여주기만 하고 싶으면 isHidden = false로 바꿔주면 되지만이 makeKeyAndVisible()을 통해서 키 윈도우로 설정해주는 역할을 하는겁니다!!!!!
참고로그냥 어떤 윈도우가 키 윈도우인지 알고 싶은거면
didBecomeKeyNotification, didResignKeyNotification
혹은 isKeyWindow 값을 확인하면 될 것 같아요
아유 속이 다 시원하네요.
그래도 이해 못한채로 개발만 하는 게 아니라 이렇게 하나하나 훑으면서 이해하고 넘어가려고 하니까오히려 더 뿌듯한 느낌?ㅎㅎㅎ 좋네요!
앞으로도 꾸준히 올려보겠습니다.좋은 하루 되세요~!!
'공부하자! > iOS' 카테고리의 다른 글
[에러 잡기] Property 'title' with type 'UILabel' cannot override a property with type 'String?' (0) | 2023.09.20 |
---|---|
View Life Cycle, 뷰의 생명 주기 (0) | 2023.07.05 |
App Life Cycle, 앱의 생명 주기 (0) | 2023.07.05 |
RxSwift 기본 개념 (0) | 2022.10.25 |
[메모마무] 업데이트 이것저것 (1) | 2022.10.21 |