iPhone OS 개요

프로그래밍/iPhone S/W개발 2008/08/25 22:31
** iPhone OS 개요 ** by Xevious7 2008.8.24.

** iPhone S/W를 만들어보기로 했다.
  개발을 하면서 틈틈히 스터디한것들을 블로그에 포스트 하기로 하였다.
** 대부분의 정보와 학습자료는 apple developer center로 부터 얻어졌다.
    http://developer.apple.com/iphone
  그 문서들을 기반으로 하여 쓰여졌다.
 
** 링크는 환영합니다만, 일부및 전체의 무단 불펌은 자제하기 바랍니다. **


어떤 플랫폼이든지 , 응용 소프트웨어를 프로그래밍 하기 위해서 첫번째로
해야될일은 그 플랫폼에 대한 기초적인 이해이다.
예를들어 원도우즈 프로그래밍을 한다면 , 원도우즈 OS에 대한 기초적인
이해가 나중에 프로그래밍에 있어서 매우 중요한 보이지 않는 요소가 된다.

나의 프로그래밍 경험에 있어서도 시스템에 대한 이해는
프로그래밍에 있어서 가장 중요한 요소라고
판단한다. 10년 전인 1998년에 홈페이지 공개했었던 그래픽프로그래밍 강좌에서도
Xlib 프로그래밍 메뉴얼에 나오는 다음의 문구를 인용하며 ,
시스템의 이해를 강조하였었다.

"An hour or so spent reading about the system in general can save many hours of programming that leads to a dead end! when the approach turns out be wrong."

일반적인 시스템에 대하여 이해하는데 투자하는 한시간 또는 독서가 결국 잘못된
접근으로 판명되어 끝장이 나는 수많은 프로그래밍 시간을 아낄 수 있다.

완전 의역해보자면 ,
아무것도 모르고 그냥 들이대며 삽질하는 시간을 줄이는 방법은 시스템에 대한
한시간의 투자 또는 독서라는 이야기 이다. ^^;;

- Xlib Programming Manual, Adrian Nye

이 문구는 학교에서 처음 Solrais를 OS를 접하고 Xlib 응용프로그램 제작하기 위해서
처음 읽었던 Xlib Programming Manual에 첫부분에 나오는 문구로 PC뿐만 아니라
HP1000 같은 미니 컴퓨터와 메인프레임 머신에서 어느정보 규모있던 프로그래밍을
경험했던 나는 이미 대단히 공감했던 부분이었고 그 이후로 이 멋진 문구를 항상
새로운 플랫폼에 들어서기 전에 머리에 각인하곤 하였었다.

이런 이유로 어떤 SDK든지 그 처음에는 그 기반구조 , 아키텍쳐및 시스템에
대한 개요문서가 등장한다.

대부분 이 개요 부분은 책의 '서문' 처럼 짧고 간결하고 때로는 지루하기도 하고 웬지
넘겨버려도 될 부분처럼 보이지만, 나는 책의 서문처럼  이 부분이 제일 중요한 부분이라
생각한다. 오히려 분량이 적기 때문에 더 읽어야 된다고 생각한다.

iPhone개발의 첫번째 시작은 iPhone의 OS의 이해로 부터 시작되는것이다.

IPhone OS는 iPhone과 IPot touch에서 공통적으로 사용되어지는 형태로
디자인되었다. iPhone OS의 기반은 MAC OS X 이며 MAC OS X는 기저는
NextSTEP 이다.  NextSTEP의 역사는 매우길다.
Apple사에서 나온 스티븐잡스는 새로운 컴퓨터 NeXT를 발표하였고 , 이 NeXT를 위한
운영체제가 바로 NextSTEP이였다.
NextSTEP MAC OS X로 발전하였으며 NextSTEP의 기반은 유닉스이다.
정확히 말하면 BSD 기반이며 위로 올라가면 최초의 유닉스를 만든 톰 켄슨과
데니스리츠의 Unix Time Sharing System이 존재한다.

즉 iPhone OS는 유닉스가 기저에 깔린 오에스이다.

iPhone OS의 레이어 구조
iPhone OS를 이해하기 쉽게 레이어 구조로 표현하면 다음 그림과 같다.


4개의 계층으로 표현되는 이 레이어 구조는 각각 다음의 역활을 한다.

Core OS 와 Core Service는  iPhone OS의 커널의 상단에 존재하는 것으로
유닉스나 리눅스처럼 커널위에서 시스템서비스 처리를 위해서 존재하는 레이어이다.
이 레이어는 파일처리 , 네트웍소켓처리 , 로우레벨 데이터처리등 같은 부분들을
접근할 수 있게 하는 레이어이다.
이 인터페이스들은 대부분 C기반이며 Core Foundation, CFNetwork, SQLite 같은
기술들을 포함하는 부분이다.

다음 상위레이어인 '미디어' 레이어는 , C베이스 함수와 Object-C 베이스의 인터페이스
혼용되어있는 레이어이다. 이 레이어는 기본적으로 2D , 3D 그래픽 기본 인터페이스와
오디오 비디오를 제어하는 부분이다.
이 부분은 C기반의 OpenGL-ES Quartz , Core-Audio를 포함하고 있다.
또한 Objective-C 기반의 에니메이션 엔진인 Core-Animation을 포함하고 있다.

마지막 레이어는 '코코아 터치' 레이어는 Object-C 기반의 프레임워크를 제공하는
레이어로 응용프로그램의 기초구조와 기반을 마련해주는 레이어이다.
즉 이 레이어는 밑의 하위레이어를 포장하여 기반기틀(foundation framework)을 제공해준다.

이 프레임워크는 예를들어 파일관리 , 네트웍 작업등의 객체 기반 인터페이스를 제공한다.
UlKit 프레임워크는 인터페이스에 관련된 , 즉 원도우 , 콘트롤 , 뷰 등을 제어하기 위한
인테페이스를 제공한다.

대부분의 프로그램은 최상위 레벨인 코코아 터치에서 개발 가능한 것으로 보인다.
하위레이어의 접근을 제공하는 이유는 기존의 행동방식을 고치는 필요성이 있을때
즉 커스터마이징이 필요할때를 위한 배려인셈이다.

iPhone OS Overview 라는 개발관련 문서의 원문에는 다음과 같이 이야기 하고있다.

"When deciding what additional technologies to use, it is recommended that you start with frameworks in the higher-level layers and fall back on the frameworks in the lower layers as needed."

"사용할 기술을 정할때 최상위 레벨의 레이어인 프레임워크 부터 시작하는 것을 추천한다
그러고나서 필요하다면 하위 레이어와 프레임워크를 대체하기 바란다."

top

Trackback Address :: http://www.xevious7.com/trackback/401

  1. jufoot 2008/08/26 09:49 MODIFY/DELETE REPLY

    좋은 글 잘 보고 있습니다~ (__)ㄳ~

  2. Kell 2008/08/26 11:27 MODIFY/DELETE REPLY

    요즘 아이폰용 S/W 에 관심이 많은 차에 제비우스님께서 포스팅을 시작하셨군요. ^^ 전번 포스팅부터 잘 읽고 있습니다~ 곧 Macbook을 살려고 준비중인데요. 제비우스님은 어떤 개발환경을 사용하려고 하시나요?

    • xevious7 2008/08/26 13:26 MODIFY/DELETE

      관련포스트는 곧 할 예정이지만 ,
      저도 맥북을 구입하였습니다. 이제 하루가 지났군요 :)
      환경세팅을 마치고 열심히 스터디중입니다.

    • 슴갈 2008/08/26 15:11 MODIFY/DELETE

      흑.. 맥북을 지르셨다니... 부럽습니다.
      저도 고민 중이다가 시들해졌었는데.. 다시 불을 당기시는군요.. -_-;;

  3. 권도우 2009/01/07 08:42 MODIFY/DELETE REPLY

    잘보고있습니다.
    감사합니다.^^

Write a comment