[iOS] Cocoa Touch Framework

정한별·2024년 1월 21일
0

iOS

목록 보기
1/2
post-thumbnail

(항상 잘못된 정보가 포함되어 있을수 있습니다)

(잘못된 정보가 있다면 댓글로 피드백 부탁드리겠습니다)

Framework vs Library

들어가기에 앞서
프레임워크와 라이브러리의 차이를 일단 알고 가야한다.

Framework

프레임워크를 한번 검색해보면
여러 사전적 의미들이 나온다.

"소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것"

이는 소프트웨어의 뼈대/구조/틀을 의미한다라고 쉽게 설명할수도 있을것이다.
아직도 잘 와닿지는 않는다.

프레임워크의 목적은 소프트웨어의 전체적인 부분에 해당하는 설계도를 제공해 재사용하여 소프트웨어 설계와 구현을 가능하게 해주는게 목적이다.
메모리 관리, 이벤트 루프 등등 모두 프레임워크가 관리한다.

더 쉽게 이해하도록 예시를 들자면 자동차를 주문했을때 뼈대가 되는 자동차 프레임을 제공해주는것이 프레임 워크이며
우리 개발자들은 이 자동차 프레임안에 인테리어, 네비게이션, 자동차 바퀴, 자동차의 도색, 옵션 등을 결정하는 것 이다.

하지만 여기서 대기업들을 한번 예시로 생각해보자...
현대자동차가 차안에 들어가는 모든 부품을 만드는가?
그것은 아닐것이다.
네비게이션을 만드는 하청업체, 바퀴를 만드는 하청업체, 쇼바를 만드는 하청업체들이 있을것이다.
우리는 이러한 하청업체들 처럼 프레임을 채울 무언가를 쉽게 가져올수 있게 해주는것들을 바로 라이브러리라고 부른다

Library

자동차의 내비게이션을 넣고싶어서 우리는 내비게이션을 제공해주는 라이브러리를 사용했다 생각해보자
난 내비게이션의 색상도 고를것이고, 내비게이션 디스플레이의 크기도 맘대로 조절할수 있고 모두는 아니더라도 어느정도 내가 원하는 대로 커스텀 할 수 있을 것이다.

이처럼 특정 기능들을 모아둔 코드, 함수, 클래스 등등의 집합이며 개발자가 코드 작성시에 활용 가능한 도구들을 의마하는것이 라이브러리 이다.

결정적 차이

두개의 결정적인 차이점이 한가지 있다.
바로 주체가 되는것이 누구인가, 흐름제어권이 누구한테 있는가를 생각해볼 필요가 있다.

프레임워크는 흐름제어권이 프레임워크 한테 있다.
라이브러리는 흐름제어권이 개발자 한테 있다.

프레임워크는 흐름제어권을 자체적으로 가지고 있다.

우리는 자동차 프레임에 어긋나는 재료는 자동차 안에 넣지 못한다.
자동차 프레임의 바퀴 사이즈는 20인치 부터 30인치 까지만 사용할 수 있는데 난 40인치 짜리 바퀴를 넣고싶다고
넣을수가 있을까? 자동차 프레임을 바꾸지 않는 한 넣을수가 없을것 이다.

이처럼 프레임워크는 어떤 특정상황에서 나오는 이벤트라던지, 어떤 라이프사이클이 되었던지 모든것들을 우리 개발자가 그 프레임 워크에 맞춰야한다.

반대로 라이브러리는 흐름제어권을 우리 개발자가 가지고 있다.
어떤 특정 상황에서 쓸지 개발자가 정할수도 있다.

결국 흐름제어권이 누군가에 있는가 이것이
프레임워크와 라이브러리를 결정짓는 가장 큰 차이점이 될 것이다.

iOS 개발자가 알고 있어야하는 Framework

iOS 개발자가 알고는 있어야하는 프레임워크는 2가지가 있다.
바로 Cocoa Framework 와 Cocoa Touch Framework 이다.

코코아 프레임워크는 OS X 어플리케이션을 개발하기 위한 프레임 워크이다.

출처 https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/OSX_Technology_Overview/CocoaApplicationLayer/CocoaApplicationLayer.html#//apple_ref/doc/uid/TP40001067-CH274-SW1

이 사진엔 나오지 않지만 우리가 만든 앱은 Cocoa 계층 위에 속해 있고,
하드웨어는 맨 아래 계층 아래 속해 있다.

그렇다면 코코아 터치 프레임워크는 어떨까?
코코아 터치 프레임워크는 iOS 어플리케이션을 개발하기 위한 프레임 워크이다.
코코아 프레임워크와 차이점은 단 하나 바로
최상단에 layer에 있는 AppKit 대신 UIKit이 들어간다는 점이다.
X OS 개발에 사용하던 프레임워크인 Cocoa 프레임워크에서 Appkit을 걷어내고
UiKit을 넣은것이 바로 iOS 개발에 사용하는 프레임워크인 Cocoa Touch 프레임워크가 되겠다.

이러한 계층적인 구조로 인해 코코아 터치 프레임워크는 다음과 같은 특징이 있다.

  • 상위 계층에 가까운 프레임워크일수록 사용자에게 가깝고 구체적이다.
  • 하위 계층에 가까운 프레임워크일수록 하드웨어 쪽에 가깝고 추상적이다.
  • 각각 계층은 하위 프레임워크에 의존적이다. 하위 프레임워크 기능에 보다 구체적인 기능을 덧붙힌게 상위 프레임워크 이다.

앱을 만들때 상위 계층의 프레임워크가 제공하지 않는 기능을 구현해야할때도 있는데 이때는 하위 계층 프레임워크를 사용할때도 있다.
하지만 대부분은 직접 접근할 필요는 없다.

Core OS

커널, 파일시스템, 네트워크, 보안, 전원 관리, 디바이스 드라이버 등 하드웨어와 밀접한 관련이 있고 iOS가 운영체제로서 기능을 하기 위한 핵심적인 영역이다.

Core Services

문자열처리, 데이터 집합 관리, 네트워크, 주소록관리, 환결설정, GPS, 나침반, 가속도 센서나 자이로스코프 등과 같은 기능들을 제공한다.
Core Foundation, Core Location, Core Motion, Core Animation 등의 프레임워크와 애플 환경에서 데이터를 저장하는데 사용하는 CoreData 또한 이 계층에 있다.

Mdeia

코코아 터치 계층에 그래픽 관련 서비스나, 멀티미디어 관련 서비스를 제공하며,
대표적인 프레임 워크로는 코어 그래픽스, 코어 텍스트, 코어 오디오, AV 파운데이션 등이 있다. 비디오 파일 같은것들을 재생할때 미디어 계층이 관여한다고 생각하면 될것 같다.

Cocoa Touch

iOS에 설치되고 실행되는 모든 앱들은 이 계층에서 제공하는 기술이나 서비스등을 이용하여 기능을 구현하고 동작한다 이 계층에 속해 있는것이 바로
UIkit과 Foundation 이다

Foundation

와이프가 화장을 시작할때 가장 바탕이 되는 화장을 할때 사용하는것이 항상 파데, 파운데이션이라고 부르던데
살면서 한번쯤은 이 파운데이션 이라는것을 한번쯤 들어 봤을 것이다.
이처럼 가장 바탕이되는 의미를 가진 파운데이션은

어플리케이션의 운영체제 서비스와 기본 기능을 제공해주는 프레임워크이다.
macOS, iOS, watchOS 및 tvOS SDK 전체에서 사용된다.
또한 내부적으로는 하위 계층인 Core Foundation에 의존하고 있다.
Core Foundation이 구현한 기능을 객체 지향적인 버전에 맞게 만들어주고 있는게 Foundation 이다.

  • 가장 기본적인 데이터 타입 (NSInteger, CGFloat, NSString)
  • 컬렉션 데이터 타입 (NSArray, NSMutableArray, NSDictionary)
  • 날짜 및 시간 관리 (NSDate, NSCalendar, Date)
  • 파일 및 데이터 관리 (NSFileManager, NSData)
  • 암호화 및 해시 (NSKeyedArchiver)
  • 네트워크 통신 (NSURLSession)
  • 스레딩 및 병렬 프로그래밍(NSThread, NSOperation)

이것들을 제외하고도 수많은 기능들을 모두 제공해주는것이 바로 Foundation 프레임워크이다.

NS 접두사의 의미?

1996년 애플이 NeXT 를 인수했을 때 기존 클래스 이름을 포함하여 NeXTSTEP 의 라이브러리인 Foundation과 AppKit이 OS X 에 통합되었다. 이때 NeXTSTEP 의 개발자들은 앞서 설명한 충돌을 피하기 위한 접두사를 이름 앞에 추가하였는데, 이것이 바로 NS이다.

NS 접두사가 붙어있는 타입들은 Swift 가 나오기 전 Objective-C 에서 사용되었던 타입들이며, 현재는 대부분의 NS 타입들이 Swift의 타입들로 Bridge 되어 있어 Swift의 타입들을 사용한다.

UIkit

UIKit은 이름에서 부터 알아볼수 있지만
사용자 인터페이스 요소를 구축하고 관리하는데 사용한다.
화면에 표시되는 각종 컨텐츠를 보유하고, 구조를 만들어 관리하며, 사용자와 상호작용하는것 까지 모두 UIKit에서 관리한다.

UIKit의 상속 계층도는 다음과 같다

나머지

나머지 코코아 터치 프레임워크를 이루는 것들은 다음과 같은 것들이 있다.
이들 중 대배분은 앱을 만드는데 필수요소는 아니다
Foundataion 과 Uikit 프레임워크 두개의 프레임워크만이
앱을 개발하기 위해서 반드시 필요한 도구들이며 이들 없이는 제대로 기능을 갖춘 앱을 만들기가 매우 어렵다.
쉽게 생각하면
파운데이션 프레임워크 = 앱 내부적으로 돌아가는 기능을 제공
Uikit 프레임 워크 = 앱 외부적으로 보여지는 부분을 제공
이라고 생각하면 편하다

  • GameKit
    게임 실행시 게임센터를 연동하거나 근거리 P2P 연결을 제공해주는 프레임워크
  • iAd
    앱 내에 배너 형태 또는 팝업형태의 광고를 삽입 할 수 있도록 해주는 프레임워크
  • Mapkit
    위치정보가 애플지도 관련 서비스를 이용 할 수 있도록 해주는 프레임워크
  • Address Book UI
    주소록 앱의 인터페이스와 기능을 커스텀앱에서도 그대로 사용 할 수 있게 해주는 프레임워크
  • EventKit
    이벤트 처리에 필요한 유저 인터페이스를 제공하는 프레임워크
  • Message UI
    미시지 앱의 인터페이스와 기능을 커스텀앱에서도 그대로 사용 할 수 있게해주는 프레임워크
  • UserNotifications
    사용자 알림을 처리하기위해 필요한 객체들을 제공하는 프레임워크
  • WebKit
    웹 관련 기능을 구현하기 위해 필요한 객체들을 제공하는 프레임워크
profile
iOS Developer

0개의 댓글