[Effective Objective-C] #47 시스템 프레임워크를 숙지하라
출처 : Effective Objective-C
-
시스템 프레임워크가 없어도 오브젝티브-C 를 사용할 수 있지만 그런 일은 매우 드물다.
표준 최상위 클래스 NSObject 조차도 언어에 포함되어 있는 것이 아니라 Foundation 프레임워크에 포함되어 있다.
Foundation 을 쓰는 것을 원하지 않으면 자신만의 최상위 클래스 뿐 아니라 자신만의 컬렉션, 이벤트 루프, 다른 유용한 클래스를 직접 만들어야 한다.
게다가 시스템 프레임워크 없이 맥 OS X 와 iOS 앱을 오브젝티브-C 로 개발할 수 없다.
-
어떤 시스템 프레임워크가 있는지 모른다면 이미 만들어진 것도 또 다시 직접 모두 작성해야 할 것이다.
-
프레임워크는 동적 라이브러리와 그것의 인터페이스를 표현한 헤더 파일들로 묶인 코드 집합이다.
때때로 iOS 용 서드 파티 프레임워크는 정적 라이브러리를 사용한다.
iOS 앱에 동적 라이브러리를 탑재하는 것이 허용되지 않기 때문이다.
이것은 진정한 프레임워크는 아니지만 그렇게 부르기도 한다.
-
맥 OS X 용 GUI 앱을 개발한다면 코코아 프레임워크를 보게 될 것이다.
iOS 의 경우는 코코아 터치 프레임워크다.
코코아 자체는 프레임워크가 아니라 앱을 만들 때 자주 사용되는 프레임워크들의 집합이다.
-
메인 프레임워크는 Foundation 이다.
여기에는 NSObject, NSArray, NSDictionary 같은 클래스가 포함되어 있다.
Foundation 프레임워크에서 사용되는 클래스 접두어는 NS 다.
NS 는 넥스트 스텝(NeXTSTEP) 운영 체제에서 오브젝티브-C 가 처음 사용될 때 만들어졌다.
Foundation 프레임워크는 사실 모든 오브젝티브-C 앱의 기초다.
-
Foundation 은 여러분이 기대하는 컬렉션 같은 기본 기능을 제공할 뿐 아니라 문자열 처리 같은 고급 기능도 제공한다.
Foundation 은 기본 이상의 것을 제공한다.
-
Foundation 옆에는 CoreFoundation 이라는 또 다른 프레임워크가 있다.
CoreFoundation 은 기술적으로는 오브젝티브-C 가 아니지만 오브젝티브-C 앱을 작성할 때 잘 알고 있어야 하는 중요한 프레임워크다.
그리고 이것은 Foundation 프레임워크 기능의 많은 부분을 복제한 C API 다.
CoreFoundation 과 Foundation 프레임워크는 이름 이상으로 아주 가깝게 연결되어 있다.
무비용 전환(toll-free bridging)이라는 기능은 CoreFoundation 의 C 데이터 구조체를 Foundation 의 오브젝티브-C 객체로 매그럽게 전환(casting)해 준다.
반대도 마찬가지다.
예를 들어 Foundation 의 문자열은 NSString 인데, CoreFoundation 에서 이에 해당하는 CFString 으로 변환될 수 있다.
이 기능은 꼭 사용해야 하지만 무슨 일을 하는지 정확히 알고 있는 곳에서만 복사되어야 한다.
-
Foundation, CoreFoundation 과 함께 많은 시스템 라이브러리들이 더 있다.
다음과 같은 것들이 있지만 이것이 전부는 아니다.
CFNetwork
CoreAudio
AVFoundation
CoreData
CoreText
-
C 수준의 API 를 사용해야 할 때가 있다.
C 로 작성된 API 는 오브젝티브-C 런타임으로 바로 전달함으로써 속도 향상의 이점이 있다.
물론 ARC 가 오브젝티브-C 객체만 가능하기 때문에 이러한 API 를 사용할 때는 메모리 관리에 좀 더 신경을 써야 한다.
이런 프레임워크를 사용해야 한다면 C 의 기본 개념에 익숙해져야 할 것이다.
-
맥 OS X 나 iOS 앱을 만들 때 대부분의 경우 UI 프레임워크를 사용할 것이다.
핵심(core) UI 프레임워크인 AppKit 과 UIKit 은 각각 Foundation 과 CoreFoundation 위에 만들어진 오브젝티브-C 클래스들을 제공한다.
이러한 핵심 UI 프레임워크 밑에는 CoreAnimation 과 CoreGraphics 가 있다.
-
CoreAnimation 은 오브젝티브-C 로 작성되었고 UI 프레임워크가 그래픽을 렌더링하고 애니메이션을 동작시키는 데 사용되는 도구를 제공한다.
CoreAnimation 자체로는 프레임워크가 아니고 QuartzCore 프레임워크의 일부분이다.
CoreGraphics 는 C 로 작성되었고 2D 랜더링에 필수적인 데이터 구조체와 함수를 제공한다.
예를 들면 CGPoint, CGSize, CGRect 데이터 구조체가 정의되어 있고, 이 모든 것은 UIKit 의 UIView 클래스가 뷰와 다른 뷰들 간의 상대적인 위치를 가리키는 데 사용된다.
-
많은 프레임워크가 UI 프레임워크 위에 만들어져 있는데 이는 iOS 에서 지도 기능을 제공하는 MapKit,
맥 OS X 와 iOS 에서 소셜 네트워킹 기능을 제공하는 Social 프레임워크 같은 것들이 있다.
-
새로운 유틸리티 클래스를 작성할 필요가 생기면 먼저 시스템 프레임워크를 살펴보라.
많은 경우 이미 여러분을 위해 만들어져 있을 것이다.
기억할 점
-
활용할 수 있는 시스템 프레임워크가 많다.
가장 중요한 프레임워크는 Foundation 과 CoreFoundation 인데 앱 개발에 필요한 많은 핵심 기능을 제공한다.
-
오디오, 비디오 처리, 네트워킹, 데이터 관리 같은 많은 공통 작업을 위한 프레임워크가 잇다.
-
오브젝티브-C 가 아닌 오직 C 만으로 작성된 프레임워크가 있다는 것을 곡 알고 있어야 한다.
그래서 좋은 오브젝티브-C 개발자가 되기 위해서는 C 의 기본 개념을 이해해야 한다.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[Effective Objective-C] 목차와 요약을 통해 한 눈에 알아보는 Effective Objective-C #41 ~ #48 (0) | 2017.10.16 |
---|---|
[Effective Objective-C] #48 반복문에는 블록 열거를 사용하라 (0) | 2017.10.15 |
[Effective Objective-C] #46 dispatch_get_current_queue 사용을 피하라 (0) | 2017.10.13 |
[ios] permission category (0) | 2017.10.12 |
[ios] 권장되는 permission guide (0) | 2017.10.11 |
댓글