티스토리 뷰

IT

아이폰 OS를 알아보자

siren911 2016. 9. 11. 02:01

아이폰이나 iPod touch에 탑재된 OS는 아이폰 OS라고 부르고 있습니다. 오늘은 우선 아이폰 OS란 어떤 OS인지 그 성장과정과 구성 그리고 어떤 기능을 가지 있는지 등의 아이폰 OS의 개요에 대해서 설명하겠습니다.





 

아이폰 OS를 간단하게 표현하면 Mac OS X의 일부분에 아이폰의 독자적인 기능을 확장한 OS 라고 말할 수 있습니다. 아이폰은 범용 PC와 비교해서 CPU 처리 능력이 느리며 메모리 등의 하드웨어 자원도 많지 않습니다. 그렇기 때문에 Max OS X가 가지고 있는 풍부한 기능으로부터 필요한 부분만 선택해서 아이폰의 하드웨어에 맞추어서 스케일다운 하고 터치 패널에 의한 멀티 터치 지원이나 GPS에 의한 현재 위치 정보 측정, 가속 센서 지원으로 불리는 아이폰의 독자적인 기능을 추가 하고 있습니다.

 

그러면, 아이폰 OS의 기본이 된 Mac O에 대해서 조금 살펴보겠습니다. Mac OS는 버전 9까지는 애플의 독자적인 커널(OS의 핵심부분)을 사용해 왔지만 버전 10(Mac OS X의 최초버전)부터는 애플에 매수된 NeXT Software사가 개발한 NEXTSTEP이란 OS에서 사용된 Mach라고 불리는 UNIX 기반의 커널로 바뀌게 되었습니다. 그 후 Mac OS X는 FreeBSD의 일부분을 집어넣는 등 FreeBSD와의 공통부분도 많이 포함하게 되었습니다. 이상으로부터 아이폰 OS는 Mac OS X를 기반으로 만들어진 OS이면서 UNIX의 한 종류인 것을 알 수 있습니다.




 

Mac OS X의 커널은 UNIX기반이지만 상위 API는 Mac OS 9와 NEXTSTEP의 자산으로부터 상속받고 있습니다. Mac OS 9로 만든 소프트웨어의 소스코드를 크게 수정하지 않고 Mac OS X의 네이티브 애플리케이션을 개발 가능하도록 Mac OS 9시대의 API의 구성을 많은 변경 없이 근대화한 것이 Carbon API라고 불리는 C언어의 API입니다.

 

그리고 애플은 또 하나의 API를 제공하는데 이것은 NEXTSTEP 위에서 움직이고 있던 API를 기반으로 한 것으로 Cocoa라고 불리는 Objective-C의 API입니다. 이것은 Mac OS 9와 전혀 다른 API이기 때문에 소스코드를 그대로 사용하는 것이 불가능하지만 상당히 세련된 객체지향의 설계로 되어있어서 개발 효율이 상당히 뛰어나기 때문에 신규 소프트웨어의 개발에 적합합니다. 이 같이 Mac OS X는 C언어로 된 API와 Objective-C에 의한 API가 혼재되어 있는 상태로 구성되어 있습니다.

 

Mac OS X의 API 구성은 OS의 버전 업그레이드와 더불어서 조금씩 변화해 왔습니다. Carbon API는 C언어의 API라는 점도 있고, 이식성이나 퍼포먼스가 좋다(Objective-C는 퍼포먼스가 약간 떨어짐)라는 점에서 커널에 가까운 API라는 인식이 많습니다. 한편 Cocoa를 시작으로 Objective-C의 API는 애플리케이션에 가까운 상위 API가 많고 개발효율의 향상을 수행하는 역할을 한다는 인식이 일반적입니다. Mac OS X를 기반으로 하는 아이폰 OS도 비슷한 구성으로 되어 있습니다.

 

또한 OpenGL이나 OpenAL등의 플랫폼에 의존하지 않는 API도 들어 있는데 이것들은 일반적으로 C언어의 API입니다.

 

조금 전부터 Objective-C란 단어가 여러 번 나왔는데, Mac OS X에서의 프로그래밍 경험이 없는 분들에게는 그다지 친숙한 단어가 아닐지도 모르겠습니다. 이 Objective-C란 C언어에 객체지향을 추가한 프로그래밍 언어 중 하나입니다.

 

객체지향 언어로는 C++이 많이 사용되고 있지만 Mac OS X와 아이폰 OS에서는 Objective-C를 채택하고 있습니다. Objective-C는 순수한 객체지향언어로 컴파일 언어이면서 매우 동적인 구조를 가지고 있고 간단한 문장만으로도 복잡한 처리를 수행하는 특성이 있습니다.

 

아이폰에서의 개발을 위해서 새로운 언어를 습득해야 한다는 점이 약간 부담스러울지도 모르겠지만 Objective-C 자체는 상당히 간단한 언어이기 때문에 습득에 그다지 많은 시간이 걸리지 않을 거라고 생각됩니다. Objective-C는 C언어를 확장한 언어로서 C언어의 문법을 그대로 사용하는 것이 가능하며 C++의 문법도 사용 가능하게 확장되어 있고(Objective-C++이라고 부릅니다) C/C++/Objective-C의 3가지 언어를 조합해서 사용 가능하도록 되어 있기 때문에 소스코드를 그대로 가져와 쓸 수도 있습니다.

 

아이폰 OS의 주된 기능을 알기 위해서 OS의 대략적인 구성을 살펴보겠습니다. 아이폰 OS는 아래와 같이 4개의 레이어로 이루어져 있습니다. 위에서 부터 하드웨어에 가까운 구조로 되어 있습니다.

 

Core OS: OS의 중핵을 이루는 커널 부분으로 UNIX 색체가 가장 강한 레이어메모리/프로세스/파일/네트워크 등의 OS의 기본 기능을 제공

 

Core Services: UNIX에 한층 더 풍부한 기능을 제공하기 위한 기반을 제공하는 레이어컬렉션/시큐리티/위치정보 등의 기능을 제공

 

Media: 그래픽/사운드/비디오 등의 멀티미디어 기능을 제공하는 레이어

 

Cocoa Touch: 사용자인터페이스나 이벤트 처리를 위한 구조를 제공하는 레이어카메라나 가속도 센서를 다루는 기능도 제공

 

아이폰 OS 중에서 가장 하드웨어적인 레이어가 Core OS입니다. Mach에서 가져온 커널이나 드라이버를 포함하는 OS의 기초 부분을 구성하고 있습니다. 메모리 관리, 프로세스 관리, 스레드 관리(POSIX), 파일 시스템, 네트워크(BSD소켓), 표준I/O 등 아이폰의 소프트웨어에 관련된 기본 기능을 C언어의 API로 제공하고 있습니다.

 

4개의 레이어 가운데 가장 UNIX적인 색체가 강한 레이어로, UNIX용으로 만들어진 소프트웨어를 아이폰에 이식하는 경우 등에 Core OS의 API를 이용하는 경우가 많습니다. 아이폰 OS는 가상기억에 대응하고 있고 각 프로세스는 독립된 메모리 공간에서 움직이지만 스왑아웃은 수행하지 않기 때문에 물리적인 메모리보다 큰 메모리 공간을 가질 수가 없습니다. 덧붙여 말하자면 현행의 아이폰에는 128MB 메모리가 탑재되어 있습니다.

 

Core OS의 1단계 위에 있는 것이 Core Services라는 레이어 입니다. Mac OS X도 아이폰 OS도 커널로써 지금까지 잘 알려진 견고한 UNIX를 채용함으로써 확실한 기반을 가지고 있습니다. OS 전체로서는 더욱 풍부한 기능을 제공할 필요가 있기 때문에 UNIX 커널에서는 정의되어 있지 않은OS 기반을 제공하는 것이 Core Services이며 거의 대부분이 C언어의 API로서 제공되어 집니다.

 

Core Services에 포함된 Foundation 프레임워크와 Core Foundation 프레임워크는 파운데이션이라고 불리는 문자열/배열/집합/일시와 같은 기본적인 데이터를 다루기 위한 구조를 지니고 있습니다. 이 두 프레임워크에서 전자는 Objective-C의 API이고 후자는 C언어의 API입니다. Core Services 이상의 레이어 에서는 C언어의 API모듈과 Objective-C의 API의 모듈을 가지고 있고, 그것들을 아래에서 받쳐주는 형태로 이 두개의 Foundation이 제공되어 있습니다.

 

Media라는 레이어는 이름 그대로 그래픽이나 사운드, 비디오 등의 멀티미디어 기능을 제공합니다. 2D 그래픽 시스템에서는 Mac OS X에서 사용되고 있는 Quartz라고 하는 C언어 API의 그리기 시스템이 탑재되어 있습니다. Quartz는 상당히 고기능의 그리기 기능을 지니고 있습니다.

 

그리기 모델로서 PDF를 채용하고 있고, 베이지 곡선을 포함한 다양한 도형을 그릴 수 있습니다. 물론 PDF의 표시도 가능합니다. 좌표는 부동소수점을 이용해서 확대축소도 잘 나타내며, Anti Aliasing은 문자뿐만 아니라 직선/곡선 등에 전부 대응함으로써 매끄럽게 그리는 것이 가능합니다. 게다가 알파 채널을 지원하므로 반투명으로 그리는 것도 가능합니다.

 

3D 그래픽 시스템은 OpenGL ES(Open Graphics Library for Embedded Systems)를 사용합니다. Silicon Graphics사가 중심이 되어서 개발한 3D 그래픽 API인 OpenGL을 임베디드용으로 만든 것입니다. C언어로 된 API입니다.

 

사운드에 관해서는 Mac OS X에서 가져온 Core Audio 프레임워크, 3D 사운드를 다룰 수 있는 프레임워크인 OpenAL(Open Audio Library)를 탑재하고 있습니다.

 

OpenAL은 Core Audio위에 구현되어 있고, OpenAL을 다른 플랫폼에서 사용할 경우를 위해 소스코드의 공유를 배려하고 있습니다. Core Audio는 C언어와 Objective-C도 된 양쪽의 API를 가지고 있고, OpenAL은 C언어로 된 API입니다.

 

비디오에 있어서는 Media Player 프레임워크라고 하는 Objective-C API가 있고, 이것으로 비디오의 재생이 간단하게 이루어집니다. H.264를 지원하고 풀스크린 재생 기능이 가능합니다 iPod 비디오 재생 기능은 애플리케이션에서 사용가능합니다. 아이폰은 매끈한 애니메이션을 가진 사용자 인터페이스가 그 특징 중에 하나인데, 그 애니메이션을 구현하는 것이 Core Animation이란 프레임워크이며, Objective-C로 된 API입니다.

 

Cocoa Touch는 최상위층의 레이어로, 주로 그래피컬한 사용자 인터페이스를 가진 애플리케이션을 위한 프레임워크라고 말할 수 있는 Objective-C API입니다. 가장 중심이 되는 것이 UIKit라고하는 프레임워크입니다. 화면상에 표시되는 다양한 사용자 인터페이스의 요소(아이폰 OS에서는 뷰라고 부릅니다)는 UIKit에 의해 구현됩니다. 화면에 표시하는 것은 물론이고, 멀티터치에 의한 사용자 조작을 받아서 이벤트 처리도 수행 합니다. 텍스트 입력이나 사진의 표시, 웹페이지의 표시, 카메라나 포토 라이브러리, 가속도 센서도 UIKit가 제공하고 있는 기능들입니다.

 

Core Services 레이어에 속한 Foundation 프레임워크가 Cocoa Touch 레이어 안에 포함되어 있는 것처럼 설명되는 경우가 있는데, 이것은 Foundation 프레임워크와 UIKit 프레임워크, 이 두 프레임워크에 의해서 기본적인 애플리케이션을 개발하는 것이 가능하기 때문에 이 두 프레임워크를 하나의 세트로서 취급하는 경우가 있기 때문입니다.

 

지금까지 살펴본 것처럼, 아이폰 OS의 프레임워크에는 Foundation 프레임워크와 같은 Objective-C기반의 프레임워크와 Core Foundation과 같은 C언어 기반의 프레임워크가 혼재해 있습니다. 이것은 Mac OS X에서도 마찬가지이며 역사적인 경위에 의해서 이같은 혼재 상태가 만들어졌습니다.

 

그리고 또한 아이폰의 하드웨어는 범용 PC처럼 자원이 풍부하지 않기 때문에 Max OS X에서 기능의 일부분을 떼어내어 사용한 형태로 구현되어 있는 부분도 있고 조금 복잡한 상태로 만들어져 있습니다.

 

예를 들어 Objective-C는 객체지향언어이므로 문자열을 다루는 클래스를 NSSting으로 정의하고 있습니다. Core Foundation에서도 프레임워크로서 문자열을 다루고 있는 CFString이란 것으로 정의하고 있습니다. NSString도 CFString도 같은 문자열을 다루고, 비슷한 기능이 각각의 프레임워크에 존재하므로 아무래도 기억해둬야 할 것이 늘어나는 것도 사실이며 C언어의 API와 Objective-C의 API를 동시에 사용할 경우에는 여러가지 배려가 필요한 경우도 있습니다.

 

하지만 비교적 간단한 애플리케이션을 개발할 경우에는 Cocoa Touch 레이어와 Foundation 프레임워크의 Objective-C의 API를 사용하는 것만으로 애플리케이션 개발이 가능한 경우도 많으므로 우선은 Objective-C/Foundation/Cocoa Touch를 습득하고 나서 C언어의 API를 배우는 것이 바람직합니다.

 

Mac OS X에서읭 프로그래밍 경험(특히 Cocoa를 사용한 경험이 있는 분)이 있는 분이라면, 아이폰 OS 프로그래밍의 습득은 비교적 순조롭게 이루어 질 것입니다. 개발 툴이나 개발 언어의 지식에 대해서는 거의 그대로 사용하는 것이 가능합니다. OS 자체에 관해서 공통부분이 많으며 부분화된 것들 중에 어떤 기능이 삭제되었는지 알고 있다면 많은 경우 Mac OS X와 비슷하게 코딩하는 것이 가능합니다.(퍼포먼스나 메모리 자원의 차이를 주의 깊게 의식할 필요가 있습니다)

 

사용자 인터페이스를 구현하고 있는 Cocoa Touch의 UIKit 프레임워크는 Mac OS X의 Cocoa에서 AppKit 프레임워크를 아이폰용으로 바꾸어서 만든 것입니다. 예를 들어 사진을 다루는 클래스가 Mac OS X에서는 NSImage라는 이름이었는데 아이폰 OS에서는 UIImage라는 이름으로 바뀌었고 사용할 수 있는 메소드의 수는 줄어들었지만 같은 이름의 메소드가 제공되고 있습니다.

 

이같이 쉽게 언어가 습득되도록 어느 정도 공통화 되어져 있고 액션, 아울렛, 델리게이트, 노피티케이션, 리스폰더체인 등의 개념도 거의 그대로 통용되고 있습니다.

 

그러나 Mac과 아이폰에서는 사용자 인터페이스가 대폭적으로 바뀌었으므로 모두가 똑같지만은 않습니다. 공통화된 부분도 많아졌지만 아이폰의 유저인터페이스에 맞추어져 대폭적으로 변경된 부분도 있고 기존 AppKit의 지식이 오히려 습득에 방해가 될지도 모르겠습니다. 그다지 선입견을 강하게 가지지 말고 습득에 임하는 것이 좋겠습니다.

 

그리고 아이폰 OS 2.0은 Mac OS X 10.5를 기반으로 개발되어졌기 때문에 Mac OS X 10.5에서 처음으로 탑재된 기능이 아이폰 OS에도 그대로 탑재되어 있습니다. 사용자 인터페이스를 애니메이션으로 구현하기 위한 Core Animation이라든지 개발 언어인 Objective-C의 최초의 메이져 버전업인 Objective-C 2.0이 그 대표적인 예입니다.

 

Mac OS X에서 개발하고 있던 분들도 새로운 API를 사용하면 낡은 버전의 OS 상에서 동작하지 않게 되기 때문에 적극적으로 사용하지 않는 경우도 있을 거라고 생각하지만 아이폰 OS에서는 Objective-C 2.0의 새로운 기능들이 적극적으로 사용되고 있으므로 새로운 기능에 대해서 배워나갈 필요가 있습니다.




'IT' 카테고리의 다른 글

비주얼베이직 6.0의 역사와 특징  (0) 2016.09.11
어셈블리 언어란 무엇인가  (0) 2016.09.11
아두이노 프로그래밍 시작하기  (0) 2016.09.10
윈도우즈 프로그래밍 역사  (0) 2016.09.04
타이젠 os 알아보기  (0) 2016.09.04
댓글