2023. 1. 12. 17:29ㆍIT/iOS
관성적으로 하는 것들에 궁금증이 많아지는 요즘이다.
내가 원하는 프로그램을 만들어가려다보니 한 줄 한 줄 신경써야할 것들이 많아졌고, 이번엔 가장 첫줄에 해당하는
이 두가지부터 햇갈리기 시작했다.
처음 우리가 프로젝트 내에서 파일을 생성할 때에 Swift File을 선택하면 Foundation이 자동으로 임포트되어있고,
Cocoa Touch Class를 임포트하면 UIKit이 임포트되어 있는 것을 볼 수 있다.
그럼 대체 Cocoa Touch는 뭐지?
이걸 이해하려면 먼저 아래 iOS의 프레임워크 구조부터 이해해야한다.
iOS는 어플리케이션에서 하드웨어까지 도달하는 과정에 다음과 같은 계층 구조를 갖고있는데,
이처럼 Cocoa Touch는 Application에 가장 가까운 계층으로 유저 인터렉션에 직접적으로 관여하고 이때 필요한 것이 UIKit인 것이다.
또 이름에서도 알 수 있는 것처럼 Foundation은 뭔가 근본에 가까워보이고 UIKit은 User Interface라는 이름에 걸맞게 유저사이드에 더 가깝게 느껴진다. 그리고 그 느낌을 위의 계층도를 통해 확인할 수 있다.
그럼 어느 때에 무엇을 선언해야할까?
Foundation을 애플 개발자 공식문서에서 찾아보면 아래처럼 보다 광범위한 것들을 다루고 있는 것을 확인할 수 있는데,
단순한 자료형에서부터 File System이나 Networking과 관련되어 OS의 기저인 커널을 통해 조작해야하는 것들은 대부분 이쪽을 통해 이루어진다.
공식문서에서는 이를 간단하게 다음과 같이 요약하고 있다.
The Foundation framework provides a base layer of functionality for apps and frameworks, including data storage and persistence, text processing, date and time calculations, sorting and filtering, and networking. The classes, protocols, and data types defined by Foundation are used throughout the macOS, iOS, watchOS, and tvOS SDKs.
Foundation 프레임워크는 앱과 프레임워크의 기능구현을 위한 기초적 계층이 됩니다. 데이터 저장 및 유지, 텍스트 가공, 데이터 및 시간 계산, 분류 및 필터나 네트워킹 등을 포함합니다. macOS, iOS, watchOS, tvOS의 SDK에 사용되는 클래스나 프로토콜, 데이터 타입 등이 정의되어 있습니다.
따라서 Foundation은 자체적으로 앱에 대해 필요한 대부분의 기능을 제공해 준다. 그러나 이 때 부족한 것이 바로 유저 인터렉션과 관련된 부분이며 이에 대한 역할을 UIKit이 해주는 것이다. 이러한 세부적인 UI 요소들을 상위 계층에서 별도로 해주는 이유는 Cocoa Touch가 아닌 Cocoa를 사용할 경우 UIKit이 아닌 AppKit이 장착되고 이는 macOS 등을 위해 사용되므로 영리한 프레임워크의 분리인 것이다. 애플은 다 계획이 있구나!
그런데 사실 실제로는 Foundation을 선언하지 않아도 기본 자료형을 사용할 수 있다.
또 UIKit만 사용해도 Foundation이 제공하는 모든 기능들을 사용할 수 있다.
첫번째 문장에 대해서, 기본적으로 Swift 언어에서 정의하고 있는 기본 자료형들이 있고, 이는 Foundation이 가지고 있는 Objective-C에 종속되는 자료형들과 다르기 때문에 Foundation의 선언과 크게 관련이 없는 것이다.
두번째, UIKit은 기본적으로 Foundation의 상위계층이므로 내부적으로 Foundation을 임포트하여 동작하고 있기 때문이다.
그럼 UIKit이 독자적으로 구현하고 있는 것이 필요할 때 UIKit을 선언하면 된다는 의미이므로, 그 기능을 마지막으로 간단하게 짚어보려고 한다.
UIKit은 앞서 수차례 언급했던 것처럼 결국 UI, User Interaction에 관한 구현이다.
따라서,
- View, ViewController, Animation, Window, Screen
등과 같이 사용자 인터페이스에 관여하는 작업이라든지,
- Touch, Press, Gesture, Keyboard
등과 같이 사용자 액션과 관련된 작업들이 모두 해당한다.
따라서 주로 Model 등을 정의하는 것처럼 단순히 데이터 처리 등의 로직만 가진 채 사용자 인터페이스에 관여하지 않는 경우는 Swift File 생성을 통해 Foundation을 활용한 작업을 하게 되고 UI를 조작해야하는 경우라면 Cocoa Touch를 통해 UIKit이 선언된 형태의 파일로 진입하는 것이 낫다고 결론을 지을 수 있는 것이다.
부족한 부분이 있다면 언제든 댓글을 통해 남겨주시면 많이 배우겠습니다.
참고
https://babbab2.tistory.com/51(개발자 소들이님 - iOS) UIKit / Foundation / Cocoa / Cocoa Touch)
https://tong94.tistory.com/21(통스님 - [Swift] Foundation 간단 정리)
https://nsios.tistory.com/82(냄수님 -[Swift] iOS 프레임워크 구조)
'IT > iOS' 카테고리의 다른 글
Swift에서 'Sort' 와 'Sorted'의 차이 (6) | 2023.02.23 |
---|---|
RxSwift는 왜 쓰는걸까?(부제: DispatchQueue의 늪) - 2 (0) | 2022.12.12 |
RxSwift는 왜 쓰는걸까?(부제: DispatchQueue의 늪) - 1 (1) | 2022.11.29 |