먼저 코코아(Cocoa)
라는 단어는, NSObject
를 상속받는 모든 클래스, 모든 객체를 가리킬 때 사용하는 단어다.
그렇다면 왜 이름이 하필 코코아일까?
The name, coined by Peter Jensen who was hired to develop Cocoa for Apple, was intended to evoke "Java for kids", as it ran embedded in web pages.
-WIKI-
위키에서 긁어온 위 글을 보면 알 수 있다. 당시 지금이상으로 핫했던 언어인 Java
가 커피원산지에서 따온 이름이기 때문에,
애플 개발자는 어린아이도 할 수 있는 자바(Java for kids
)라는 의미에서 코코아
라고 이름지었다고 한다.😅
코코아 터치 프레임워크란 iOS 개발 환경을 구축하기 위한 최상위 프레임워크다.
즉, 일반적으로 iOS개발을 위해 Object-C
혹은 Swift
에서 상속하여 사용하는 UIkit
, Foundation
을 포함한 대부분의 클래스, 객체들이 모두 코코아 터치 프레임워크에 속한다.
참고로 비슷한 이름의 코코아 프레임워크
는 macOS
개발 환경을 위한 프레임워크라고 한다. 그렇기 때문에, 아이폰, 아이패드 등의 터치기반의 iOS 개발환경에 코코아 터치 프레임워크
라는 이름이 붙게된 것 같다.
UI(User Interface)
라는 이름에서 알 수 있듯이, UIKit 프레임워크는 사용자의 인터페이스를 관리하고, 이벤트를 처리하는게 주 목적인 프레임워크다.
사실 iOS
이전의 macOS
에서는 비슷한 개념으로 Application kit
줄여서 Appkit
이라는 프레임워크를 사용했었지만, iOS로 넘어오면서 비슷한 개념을 가진 UIkit
으로 대체되었다.
UIkit
에서 주로 처리하는 사용자 이벤트로는 제스처 처리
, 애니메이션
, 그림 그리기
, 이미지 처리
, 텍스트 처리
등이 있다.
또한 테이블뷰, 슬라이더, 버튼, 텍스트 필드, 얼럿 창 등 애플리케이션의 화면을 구성하는 요소도 포함한다.
그렇기 때문에, 자주 사용하는 UIViewController
, UIView
(당연히 이를 상속하는 버튼, 텍스트 필드 등도 포함), UIAlertController
등 앞에 UI
가 붙는 클래스들을 사용하려면 반드시 UIkit
을 상속해야 한다.
이쯤되면, 거의 화면을 구성하기 위해 필수적으로 상속해야하는 프레임워크라고 봐도 무방할 것 같다.
프로그램의 중심을 담당하는 프레임워크이다. 사실 가장 기본적인 원시 데이터 타입
(String, Int, Double)부터가 Foundation
에 포함되어있기 때문에, 프레임워크를 상속하지 않으면 아무것도 할 수 없다고 봐도 무방하다.
Foundation
내에 포함된 클래스들은 앞에 NS
가 붙으며 주로 사용하는 기능들은 다음과 같다.
Number, Data, String
: 원시 데이터 타입 사용
Collection
: Array, Dictionary, Set 등과 같은 컬렉션 타입 사용
Date and Time
: 날짜와 시간을 계산하거나 비교하는 작업
Unit and Measurement
: 물리적 차원을 숫자로 표현 및 관련 단위 간 변환 기능
Data Formatting
: 숫자, 날짜, 측정값 등을 문자열로 변환 또는 반대 작업
Filter and Sorting
: 컬렉션의 요소를 검사하거나 정렬하는 작업
Resources
: 애플리케이션의 에셋과 번들 데이터에 접근 지원
Notification
: 정보를 퍼뜨리거나 받아들이기는 기능 지원
App Extension
: 확장 애플리케이션과의 상호작용 지원
Error and Exceptions
: API와의 상호작용에서 발생할 수 있는 문제 상황에 대처할 수 있는 기능 지원
File System
: 파일 또는 폴더를 생성하고 읽고 쓰는 기능 관리
Archives and Serialization
: 속성 목록, JSON, 바이너리 파일들을 객체로 변환 또는 반대 작업 관리
iCloud
: 사용자의 iCloud 계정을 이용해 데이터를 동기화하는 작업 관리
URL Loading System
: 표준 인터넷 프로토콜을 통해 URL과 상호작용하고 서버와 통신하는 작업
Bonjour
: 로컬 네트워크를 위한 작업
import UIKit
class asdf{
var b = DateFormatter()
}
그렇다면, 위 내용대로 한가지 실험을 해보자.
위에서 사용중인 DateFormatter
는 Foundation
프레임워크에 포함된 클래스다. 그러므로 이를 사용하기 위해선 반드시 Foundation
프레임워크를 import
해야 할 것이다.
그렇다면 위 코드에서는 UIkit
만 import했으니 당연히 오류가 발생하겠지?
이유가 뭘까? 이에 대해 자세히 알기 위해서는 먼저, 각 프레임워크의 계층구조에 대해서 이해해야 한다.
기본적으로 코코아 프레임워크는 위와같은 계층구조를 갖는다.
하위 계층일수록 하드웨어에 친화적이고, 반대로 상위 계층일 수록 사용자 친화적이다.
이 중 UIKit
은 가장 위인 Cocoa Touch
계층이고 그보다 두단계 Foundation
은 Core Service
계층이다. 그렇기 때문에 UIkit
이 Foundation
프레임워크를 상속했을 가능성이 높다.
결과적으로 UIkit
을 상속하는 것 만으로, Foundation
도 함께 상속한 결과를 내는 것이다.
각 계층에 포함된 프레임워크들은 다음과 같다.
하위 계층의 프레임워크를 사용하여 애플리케이션을 직접 구현하는 프레임워크.
UIKit
, GameKit
, MapKit
상위 계층인 코코아 터치 계층에 그래픽 관련 서비스나 멀티미디어 관련 서비스를 제공
Core Graphics
, Core Text
, Core Audio
, Core Animation
, AVFoundation
문자열 처리, 데이터 집합 관리, 네트워크, 주소록 관리, 환경 설정 등 핵심적인 서비스들을 제공.
또한 GPS, 나침반, 가속도 센서나 자이로스코프 센서와 같이 디바이스의 하드웨어 특성에 기반한 서비스도 제공.
Foundation
, Core Foundation
, Core Location
, Core Motion
, Core Animation
, Core Data
커널, 파일 시스템, 네트워크, 보안, 전원 관리, 디바이스 드라이버 등이 포함
iOS가 운영 체제로서 기능을 하기 위한 핵심적인 영역
이제 UIkit 프레임워크의 내부를 들여다보자.
자세히 볼 필요도 없이 첫 줄부터 Foundation
을 상속하고 있다는 것을 확인할 수 있다.
물론 그렇다고 해서, 모든 상위계층이 하위계층을 포함하고 있다거나, 같은계층끼리의 포함관계가 없는 것은 아니다.
예를들어 같은 계층의 GameKit은 UIkit을 상속하고있고, Foundation은 CoreFoundation을 상속하고 있다.
https://www.edwith.org/boostcourse-ios/lecture/17996/
https://pole2win.tistory.com/entry/Objective-C-cocoa-core-foundation