ProgrammingInObjectiveC:Chapter 01

From 흡혈양파의 번역工房
Jump to navigation Jump to search
1장
: 소개

1장 :: 소개

1970년대 초, AT&T Bell 연구소의 데니스 리치(Dennis Ritchie)는 C 프로그래밍 언어를 창시하였다. 그러나 이 언어는 1970년대 후반에서야 인기를 얻고 널리 사용되기 시작했다. 그 전에는 연구소 밖에서 C 컴파일러를 상업 용도로 손쉽게 구할 수 없었기 때문이었다. 거의 C 로만 짜인 운영체제인 유닉스(UNIX)가 급속도로 인기를 얻으면서 C 언어 역시 빠른 속도로 대중에 널리 퍼지게 되었다.

브래드 콕스(Brad J. CoX)는 1980년대 초에 Objective-C 언어를 설계하였다. 이 언어는 Smalltalk-80 라는 언어를 기반으로 만들어졌다. Objective-C 는 C 언어 위에 을려져 있는 '계층적 (layered)' 인 구조다. 즉, C 언어를 확장하여 '객체' 를 생성하고 다룰수 있는 언어를 새로 만들어 낸 것이다.

넥스트 소프트웨어(NeXT Software)는 1988년에 Objective-C 의 라이선스를 받아 NeXTSTEP 이라는 개발 환경과 라이브러리를 개발하였다. 1992년에는 자유 소프트웨어 재단(Free Software Foundation, FSF)의 GNU 개발 환경에 Objective-C 지원이 추가되었다. 자유 소프트웨어 재단의 모든 제품의 저작권은 재단이 소유하며 GNU General Public License(GPL) 로 배포된다.

1994년에 넥스트 컴퓨터 (NeXT Computer)와 썬 마이크로시스템즈(Sun MicroSystems)는 NeXTSTEP 시스템의 표준 규격을 발표하고, 이를 OPENSTEP 이라고 명명하였다. 자유 소프트웨어 재단이 구현한 OPENSTEP 은 GNUStep 이라고 불렸다. 리녹스 버전은 리녹스 커널과 GNUStep 개발 환경을 포함하고 여기에 linuxSTEP 이라는 어울라는 이름을 붙였다. 1996년 12월 20일, 애플 컴퓨터 (Apple Computer)는 넥스트 소프트웨어를 인수하고, NeXTSTEP/OPENSTEP 환경이 애플의 차세대 운영체제인 Mac OS X 의 근간이 될 것이라고 발표하였다. 애플 버전의 이 개발 환경은 코코아(Cocoa)라고 청했다. 애플은 Objective-C 언어를 지원하고 프로젝트 빌더(Project Builder 나중에 Xcode 로 바뀐다)와 인터페이스 빌더(Interface Builder) 같은 개발 도구로 Mac OS X 용 응용 프로그램을 제작할 강력한 개발 환경을 만들어낸 것이다.

2007년, 애플은 Objective-C 를 Objective-C 2.0 로 업데이트하였다. 이 책에서는 Objective-C 의 새 버전을 다룬다.

아이폰(iPhone)이 처음 출시된 2007년, 개발자들이 이 혁신적인 장치에서 돌아가는 프로그램을 개발할 기회를 강하게 요구했다. 애플은 처음에는 써드파티 애플리케이션 개발을 환영하지 않았다. 웹 기반 프로그램을 개발하는 것으로 아이폰 개발자 지망생들을 달래려 했다. 웹 기반 애플리케이션은 아이폰에 내장된 사파리(Safari) 브라우저에서 실행되는데, 사용자가 해당 프로그램을 제공하는 웹사이트에 접속해야만 프로그램을 쓸 수 있었다. 개발지들은 웹 기반 프로그램에 있는 태생적인 한계에 만족하지 못했고, 결국 애플은 개발자들이 아이폰용 네이티브 애플리케이션을 개발하도록 허용하였다.

네이티브 응용 프로그램은 아이폰안에 거주하고 아이폰의 운영체제 위에서 다른 기본 응용 프로그램(Contacts, iPod, Weather 등)과 동일한 방식으로 동작한다. 아이폰의 운영체제는 Mac OS X 의 한 버전이기 때문에 맥(예컨대 맥북 프로)에서도 애플리케이션들을 개발하고 디버깅할 수 있다. 실제로 애플은 얼마 지나지 않아 강력한 소프트웨어 개발 킷(Software Development Kit, SDK)을 내놓았고, 그 덕분에 개발자들이 빠르게 아이폰 개발과 디버깅 작업을 할 수 있게 되었다. 아이폰 시뮬레이터를 이용하면 아이폰이나 아이팟 터치(iPod Touch)에 프로그램을 다운로드해서 테스트하지 않고도 자신의 개발장비에서 직접 디버깅할수있다.


이 책에서 배울거리

나는 Objective-C 의 튜토리얼 작성에 대해 고심하며, 아주 중요한 결정을 내려야했다. 시중에 나온 다른 Objective-C 책들은 전부 C 언어 지식을 전제로 했던 터였다. 나 역시 독자들이 C 언어로 프로그램 짜는 법을 안다는 가정 하에 글을 쓸 수도 있다. 또한, Foundation과 Application Kit 프레임워크 같은 풍부한 라이브러리를 사용하는 측면에서 언어를 가르칠 수도 있다. 맥의 Xcode 와 인터페이스빌더 같은 개발 도구를 사용하는 방법을 가르치는 교재도 이미 몇 권 있다.

하지만 이런 방법은 모두 조금씩 문제가 있어 보였다. 먼저, Objective-C 를 배우기 전에 C 언어 전체를 배우는 것은 옳지 않다. C 라는 절차적 언어에 포함된 많은 특징은 Objective-C 로 프로그래밍하는데 필요하지 않으며, 초급 단계에서는 더욱 그렇다. 사실, 이런 특징들은 올바른 객체지향 프로그래밍 방법론에 따르는 데 오히려 방해가 된다. 또한, 객체지향 언어를 배우기 전에 절차적 언어의 세세한 부분을 모두 학습하는 방식은 그리 좋은 생각이 아니다. 이는 좋은 객체지향 프로그래밍 스타일을 키우는데 올바른 시작점이라 할 수 없고, 프로그래머가 잘못된 동기와 사고방식을 갖게 되기 때문이다. Objective-C 가 C 에서 확장된 언어라는 사실 때문에 C 를 먼저 배울 필요는 없다.

그래서 이 책에서는 C 언어부터 가르치지도 않고 C 언어에 대한 지식을 기대하지도 않는다. 그 대신, 객체지향 프로그래밍의 관점에서 Objective-C 언어와 하부에 있는 C 언어를 통합된 하나의 언어로 보고 가르치는 새로운 접근법을 취하기로 하였다. 이 책의 목적은 제목 그대로, Objective-C 2.0 으로 프로그래밍하는 법을 가르치는 것이다. 프로그램을 짜고 디버깅하는 데 사용하는 개발 도구의 사용법을 상세히 가르치지 않으며, 코코아로 인터랙티브한 그래픽 응용 프로그램을 만드는 방법을 깊이 있게 설명하지도 않는다. 이런 것은 일단 Objective-C 로 프로그램을 짜는 방법을 배운 뒤에, 다른 자료들로 상세히 공부할 수 있다. 사실, Objective-C 로 프로그래밍하는 방법을 온전히 알고 나면 이런 것들을 배우기가 훨씬 쉬워진다. 또한 독자에게 프로그래밍 경험이 있을 거라고 가정하지도 않았다. 만일 여러분이 막 프로그래밍을 시작했다면 Objective-C 를 최초의 프로그래밍 언어로 배울 수 있다.

이 책은 예제를 통해 Objective-C 를 가르친다. 언어의 새 특정을 제시할 때마다 그 특정을 설명하는 작은 완성된 프로그램을 선보일 것이다. 백문이 붙여일견이다. 많은 설명보다 적절한 예제 프로그램 하나가 더 효과적이다. 온라인에서 제공되는 모든 프로그램을 돌려보고 책에 나온 결과와 직접 작업한 결과를 비교해보자. 이렇게 해야 언어와 문법을 배울 수 있고, Objective-C 프로그램을 컴파일하고 돌라는 과정에 더 친숙해진다.


이 책의 구성 방식

이 책은 크게 세 부분으로 나뉘어 있다. 1부 「Objective-C 2.0」 에서는 이 언어의 필수 부분에 대해 설명한다. 2부 「Foundation 프레임워크」에서는 Foundation 프레임워크를 구성하는 풍부한 클래스들을 사용하는 방법을 공부한다. 3부 「코코아와 아이폰 SDK」 에서는 코코아 Application Kit 의 개요를 살펴본 후, UIKit 프레임워크를 사용해 간단한 아이폰 응용 프로그램 만드는 과정을 설명하고, Xcode 와 인터페이스 빌더로 코드를 개발하고 디버깅하는 방법을 알아본다.

프레임워크란, 프로그램을 개발하기 쉽도록 클래스와 루틴을 논리적인 그룹별로 모아놓은 것이다. Objective-C 프로그래밍의 강점은 상당 부분 방대한 프레임워크에서 나온다.

2장 「Objective-C 로 프로그래밍하기」는 Objective-C 로 첫 번째 프로그램을 만드는 방법을 설명하며 시작한다.

이 책이 코코아 프로그래밍을 공부하는 책이 아니기 때문에, 그래픽 유저 인터페이스(GUI)를 깊이 다루지 않으며 3부 전까지는 거의 언급도 하지 않는다. 따라서, 프로그램에 입력 받고 출력을 내보내는 방법이 필요하다. 이 책에 나오는 대부분의 예제에서는 키보드로 입력을 받고 창(window)에 출력을 내보낸다. 만일 커맨드라인에서 gcc 를 사용한다면 터미널(terminal) 창이 될 것이고, Xcode 를 사용 한다면 콘솔(console) 창이 될 것이다.

3장 「클래스, 객체, 메서드」 에서는 객체지향 프로그래밍의 기초를 다룬다. 이 장에서 새로운 용어가 아주 약간 등장한다. 또한 클래스를 정의하는 방법을 소개하고 인스턴스나 객체에 메시지를 보내는 것의 의미를 설명한다. 만일 강사나 노련한 Objective-C 프로그래머라면, 객체 선언 시에 정적(static) 타이핑을 사용한다는 점을 눈치챌 것이다. 이 방식으로 학습을 시작하는 것이 학생들에게 최선이라고 생각하기 때문이다. 이렇게 하면 컴파일러가 더 많은 오류를 잡아낼 수 있고,프로그램 자체가 문서화된다. 그리고 초보 프로그래머들이 알고 있는 데이터 형을 명시적으로 선언하게 한다. 따라서 id 형과 그 강점은 9장 「다형성,동적 타이핑,동적 바인딩」 전까지는 깊이 다루지 않는다.

4장 「데이터 형과 표현식」 에서는 Objective-C 의 기본 데이터 형과, 프로그램에서 이 데이터 형들을 사용하는 방법을 설명한다.

5장 「프로그램 반복문」 에서는 프로그램에서 사용할 수 있는 세 가지 반복문(for 문, while 문, do 문)을 소개한다.

어느 프로그래밍 언어에서든 결정을 내라는 일은 중요하다. 6장 「의사결정하기」에서는 Objective-C 의 if 문과 switch 문을 상세히 다룬다.

7장 「클래스에 대해서」 에서는 클래스와 객체에 대해 더 깊이 파고든다. 메서드, 다중 인수, 지역 변수가 이 장에서 논의된다.

8장 「상속」에서는 상속의 핵심 요소를 설명한다. 상속받은 것을 활용하면 프로그램을 더 쉽게 개발할수있다. 상속과 서브클래스의 개념이 있으면 기존 클래스의 정의를 쉽게 수정하거나 확장할 수 있다.

9장은 Objective-C 언어의 기본적인 특정 세 가지를 설명한다.

10장 부터 13장 까지는 Objective-C 에 대한 논의를 마무리한다. 객체의 초기화, 프로토콜, 카테고리, 전처리기 그리고 함수,배열,구조체,포인터를 포함한 하부의 C 특징 등을 다룬다. 이 하부 특징들은 보통 객체지향 프로그램을 처음 개발할 때는 필요하지 않으며, 어쩌면 피하는 것이 최선일지도 모른다. 13장 「하부 C 언어 기능」 은 처음에는 간단히 훝어보고 언어의 특정 기능을 더 학습해야 할 때만 다시 살펴보는 것을 권한다.

2부는 「14장 Foundation 프레임워크 소개」에서 시작한다. 이 장에서는 이 프레임워크를 소개하고 프레임워크의 문서에 접근하는 방법을 알려 준다.

15장 부터 19장 까지는 Foundation 프레임워크의 중요한 특정을 다룬다. 여기에는 숫자와 문자객체, 컬렉션, 파일시스템, 메모리 관리,객체 복사와 저장 과정이 포함된다.

2부를 마칠 때쯤에는 Foundation 프레임워크를 사용해서 꽤 복잡한 Objective-C 프로그램을 개발할 수 있을 것이다.

3부는 20장 「코코아 소개」로 시작한다. 맥에서 복잡한 그래픽 응용 프로그램을 개발히는 데 필요한 클래스를 제공하는 Application Kit 을 짧게 정리한다.

21장 「아이폰 응용 프로그램 만들기」에서는 아이폰 SDK 와 UIKit 프레임워크를 소개한다. 이 장에서는 간단한 아이폰 응용 프로그램이나 아이팟 터치 응용 프로그램을 작성하는 방법을 단계별로 설명하고, 분수 계산 기능을 지원하는 아이폰용 계산기 프로그램을 만들어 본다.

객체지향 프로그래밍에 대해 말하려면 용어를 상당히 많이 알아야하기 때문에 부록 A 「용어집」에서 일반적으로 널리 사용하는 용어 의 뜻을 설명해 놓았다.

부록 B 「Objective-C 2.0 언어 요약」 에서는 Objective-C 언어를 요약해서 필요에 따라 찾아볼 수 있게 하였다.

부록 C 「AddressBook 소스코드」 에는 2부에서 개발하고 사용한 두 클래스의 소스코드를 담았다. 이 클래스들은 주소카드와 주소록 클래스를 정의한다. 주소록에 주소카드를 생성하거나 삭제하고, 사람을 찾고, 주소록의 내용을 표시하는등 간단한 기능을 수행하는 메서드도 들어있다.

Objective-C 프로그램을 작성하는 법을 배운 후 여러 방향으로 계속 학습할 수 있다. 하부의 C 프로그래밍 언어에 대해 더 배우거나 Mac OS X 용 코코아 프로그램을 작성해도 된다. 아니면 복잡한 아이폰 응용 프로그램을 만들수도 있다. 어떤 선택을하든, 부록 D 「참고자료」 에서 적당한 방향을 찾을 수 있을 것이다.



감사의 글

이 책의 초판을 준비할 때 도움을 준 사람들에게 감사를 표한다. 먼저, 원고를 살펴봐 준 Tony Iannino 와 Steven Levy 에게 감사를 표하고 싶다. 또한 여러 가지 의견을 준 Mike Gaines 에게도 감사한다.

기술 편집자인 Jack Purdurn(초판), Mike Trent 에게도 감사의 말을 전한다. 초판, 2판 모두 Mike의 검토를 받을 수 있던 것은 정말 큰 행운이었다. 그는 내가 썼던 어떤 책에서보다 더 철저하게 검토해 주었다. 원고의 약점을 지적해 준 것은 물론 이거니와 더 나은 방향까지 친절하게 제시해 주었다. 초판에서 Mike의 충고 덕택에 메모리 관리를 가르치는 방식을 변경하였고 모든 예제에서 '메모리 누수' 가 발생하지 않도록 노력하였다. 또한 아이폰 프로그래밍 장에서 아주 귀중한 의견을 내주었다.

초판 때에도 함께한 Catherine Babin 은 표지 사진뿐 아니라 많은 사진을 찍어 주어서 멋진 사진을 고를 수 있었다. 친구가 준 표지 사진 때문에 내 책이 더 특별해졌다.

피어슨 출판사의 Mark Taber는 2판을 작업하는 내내 원고 마감을 어긴 나를 이해해 주었다. 원고가 늦을 때마다 향상 참아 준 그에게 깊은 감사를 표한다. 피어슨의 개발 펀집자 Michael Thurston, 카피 펀집자 Krista Hansing, 프로젝트 펀집자 Mandie Frank 에게 감사의 말을 전한다. 특히 Mandie 는 시간에 쫓기는 막바지 작업을 아주 멋지게 해주었다.

언제나처럼 내 아이들은 이 책을 완성하던 여름 동안(물론 가을까지 작업이 이어지긴 했지만) 믿기 힘들 정도로 성숙함과 인내심을 보여 주었다. Gregory, Unda, Julia야, 사량한다!


스티븐 코찬(Stephen G. Kochan)

2008년 10월


Notes