본문 바로가기
프로그래밍 놀이터/iOS

[Effective Objective-C] #47 시스템 프레임워크를 숙지하라

by 돼지왕 왕돼지 2017. 10. 14.
반응형

 [Effective Objective-C] #47 시스템 프레임워크를 숙지하라


출처 : Effective Objective-C

2d 랜더링, appkit, AVFoundation, c api, c 기본 개념, c 수준 api, Casting, cfnetwork, cfstring, CGPoint, CGRect, cgsize, Cocoa, Cocoa Touch, coreanimation, coreaudio, CoreData, corefoundation, coregraphics, coretext, Foundation, Foundation Framework, gui, IOS, MapKit, next step, ns, ns abbriviation, ns 약자, NSArray, NSDictionary, nsobject, NSString, nsstring cfstring, Objective-C, OSX, quartzCore, social framework, toll-free bridging, UI Framework, UIKit, UIView, what is ns, [Effective Objective-C] #47 시스템 프레임워크를 숙지하라, 구조체, 동적 라이브러리, 동적 라이브러리 탑재, 메모리 관리, 무비용 전환, 문자열 처리, 서드 파티 프레임워크, 속도 향상, 숙지, 시스템 프레임워크, 유틸리티 클래스, 인터페이스, 정적 라이브러리, 컬렉션, 코코아 터치 프레임워크, 코코아 프레임워크, 프레임워크, 프레임워크 집합, 함수


-

시스템 프레임워크가 없어도 오브젝티브-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 의 기본 개념을 이해해야 한다.




반응형

댓글0