블로그 이미지
'무른모'란 부드럽다라는 뜻을 가진 '무르다'라는 말과 도구, 연장을 뜻하는 '연모'라는 순 우리말의 합성어로 소프트웨어를 말합니다. seanhigher

카테고리

분류 전체보기 (161)
Blog srart (16)
Dev Center (94)
Real Life (13)
Mac life (21)
Naver life (17)
Total633,812
Today36
Yesterday88
맥을 사용하다보면 대쉬보드라는 편리한 기능이 있다. 다양한 위젯들을 바탕화면에 깔아놓고 사용하는 것이다. 화면적 제약이 있는 아이폰에서는 대쉬보드의 기능을 가질 수는 없지만, 단일 뷰 형태의 표현이 가능하다. 날씨라던가, 간단한 시세정도라면 매우 보기 좋을 것이다!


UtilityApplication 만들기.
Xcode 를 실행하고 새 프로젝트를 실행한다. 프로젝트 형식은 UtilityApplication 을 선택하도록 한다. 이것은 단일화면으로 이루어진 위젯 형태의 프로젝트를 기본적으로 생성해주어서 편하게 작업을 할 수 있다.


그림1. 프로젝트 생성

유틸리티 어플리케이션을 생성하고, 프로젝트명을 입력하도록 한다. 이전에 해왔던 어플리케이션과 마찬가지로 Xcode가 실행되지만, 평소보다는 많은 파일들이 있는것을 볼 수 있다.


그림2. Xcode 화면

유틸리티 어플리케이션의 경우에는 두개의 창이 변환되는 형식으로 되어 있다. 창의 변화를 확인하기 위해서 이미지를 추가한다. 프로젝트에 이미지를 추가하기 위해서는 이미지파일을 끌어다가 놓으면 된다. 템플릿을 통해 만들어진 프로젝트는 두개의 창이 버튼을 통해 변환되는 구조를 가지고 있다. 처음에 나타나는 화면은 'MainView.xib' 파일을 통해 나타난다. 'MainView.xib'파일을 더블클릭하여 인터페이스 빌더를 실행한다. 필요에 따라 이미지와 라벨등을 넣도록 한다. 라이브러리가 곂쳐서 뒤에 있는 것이 보이지 않는다면 'MainView.xib' 창에서 라이브러리항목을 아래로 내릴수록 보여지는 것은 가장 위로 올라가게 된다.


그림3.  인터페이스 빌더

화면 수정을 마쳤다면 저장을 하고 인터페이스 빌더를 종료하도록 한다. 이제 실행버튼을 누르면 시뮬레이터가 실행되고 위젯 형태의 어플리케이션이 실행되는 것을 볼 수 있을 것이다.


그림4. 어플리케이션 실행화면

'MainWindow.xib' 파일은 화면전환이 이루어질때 뒤에 있는 배경화면뷰이고, 'FlipsideView.xib' 파일은 전환된 화면을 나타낸다. 이제 위젯정도의 간단한 프로그램은 어렵지 않게 만들 수 있는 것이다.

Posted by seanhigher

댓글을 달아 주세요

Object-C 프로그래밍에 있어서 델리게이트는 매우 중요한 요소라고 할 수 있다. 게다가 이 델리게이트는 아이폰 애플리케이션의 생명주기와도 깊은 연관이 있다. 델리게이트가 없다면 생명을 잃어버린 애플리케이션이라고 말 할 수 있다.



애플리케이션의 생명주기.
어떤 프로그래밍 언어이든지, 프로그램이 소스 코드를 통하여 메모리에 적재되고, 각자 정해진 위치에서 역할을 수행하고, 필요가 없어졌을 때 메모리에서 사라지는 생명주기 싸이클이 존제한다. 아이폰 프로그램에서도 예외라고 할 수는 없다.


그림1. 아이폰 애플리케이션 생명주기.

애플리케이션의 생명 주기는 실행과 종료 사이에 발생하는 순차적인 이벤트들을 만들어낸다. 사용자는 아이폰 스크린의 아이콘을 선태하여 애플리케이션을 실행하게 된다. 이후에 시스템은 진행 상태를 보여주고 애플리케이션의 main 함수를 호출한다. 이 순간부터 초기화를 위한 작업들이 UIKit으로 넘어오는데, 애플리케이션의 UI를 불러오고 이벤트 루프를 준비한다. 이벤트 루프 과정에서 UIKit은 커스텀 객체로의 이벤트 전달과 애플리케이션에서 발생한 명령들을 처리하는 것을 조절하게 된다. 사용자가 프로그램을 종료하는 액션을 취하게 되면, UIKit을 통해서 애플리케이션에 알리고 종료가 진행된다.


애플리케이션 델리게이트.
애플리케이션 델리게이트(application delegate) 객체의 역할은 애플리케이션의 동작을 모니터링 하는 것이다. 델리게이트라함은 위임이라는 뜻을 가지고 있는데, 의미 그대로 메소드의 역할을 위임하는 것이라고 할 수 있다. 변수의 경우, 각 변수가 가지고 있는 값들을 어떤 특졍한 패턴, 함수에의해 변형되어, 개발자의 의도대로 결과 값을 얻을 수가 있다. 이런 특징적인 역할을 하는 함수(모듈, 객체, 메소드라고 정의할 수 있는)들을 특정한 조건이나, 의도를 가지고 묶음으로 만들어내 좀더 간편하게 사용하도록 하는 것이 델리게에트를 사용하는 목적이라고 할 수 있다. 또 한가지 델리게이트를 사용하는 이유는 UIApplication 과 같은 복잡한 객체를 상속하는 것을 피하고, 메소드를 재정의 하지 않음으로써 좀더 객체 지향적인 프로그래밍을 할 수 있도록 도와주게 된다.


그림2. 액션과 각 객체의 실행.

애플리케이션이 어떠한 액션을 만났을때, 그 액션에 맞는 객체의 메소드가 실행이 되게 된다. 이 객체는 객체에서 정의된 액션에 대해서만 행동을 하게 된다. 다양한 액션을 받아들이기 위해서는 그 액션에 대해서 정의를 해 주거나, 그 액션을 가지고 있는 상위 클래스를 상속 받아야 한다. 위 그림에서 action A 를 받아서 행동할 수 있는 것은 object A 뿐이다. action B 는 object B, action C 는 object C 로만 반응이 가능하다. 만약 action A 를 실행해야 하는 상황에서 action B 가 발생을 한다면 object A 는 적절한 대응을 할 수가 없다. action B 에 대응하기 위해서는 object B 가 상속받은 클래스를 동일하게 상속받아야 한다.


그림3. 델리게이트를 통한 확장.

이런 불필요한 자원의 낭비를 줄여주는 것이 델리게이트이다. 델리게이트는 메소드와 메소드를 이어주는 연결고리라고 할 수 있다. 필요한 메소드를 상속을 통한 확장이 아니라, 연결의 의미에서 전달만 하게 된다. 위의 그림처럼 action A, B, C 를 따로 따로 정의해서 사용하는 것이 아닌, object A, B, C 를 하나로 묶어주고, 연결해 줌으로써 좀더 다양한 action에 대응할 수 있는 유연성을 제공한다. 불필요한 상속을 줄여주는 것이다.


델리게이트의 선언.
델리게이트는 다음과 같이 선언되고, 사용할 준비가 된다.

ProjectNameViewController.h 파일
@Interface ProjectNameAppDelegate : NSObject <UIApplicationDelegate> {
        UIwindow *window;
        ProjectNameController *viewController;
}


ProjectNameViewController.m 파일
- (void)applicatoinDidFinishLaunching: (UIApplication *)application {
        // TODO something
}


델리게이트는 아이폰 프로그래밍에 있어서 뿐만아니라, 객체지향 프로그래밍에 있어서 중요한 요소임에 분명하다. 그 개념이 쉽게 이해가 되지 않을 수 있겠지만, 꼭 이해하고, 사용할 줄 알아야 한다.

Posted by seanhigher

댓글을 달아 주세요

버튼은 사용자들로 하여금 가장 간단하게 의도를 도출할 수 있는 좋은 도구이다. 사용자가 보고 있는 여러개의 버튼 중에서 단 하나 내가 원하는 것을 큭릭하기만 하면 된다.




Round Rect Button - Implements a button that intercepts touch events and sends an action message to a target object when it's tapped. You can set the title, image, and other appearance properties of a button. In addition, you can specify a different appearance for each button state.


버튼 애트리뷰트의 항목

▼ Button
Type : 버튼의 종류를 선택할 수 있다. 종류에 따라 다른 모양의 버튼이 나타나게 된다. Custom, Detail Disclosure Info light, Info Dark, Add Contact 중에 선택할 수 있다.
[ Title, Image, Background, Text Color, Shadow 의 항목에 대해서는 Default, Highlighted, selected, disabled 의 네가지 상태에 대해서 설정을 다르게 할 수 있다. ]
Title : 버튼에 나타날 텍스트를 표현한다.
Image : 버튼의 이미지를 나타낸다.
Background : 버튼을 배경으로 이미지를 나타낸다. 이미지는 원본의 비율을 유지하지만, Background 는 전체에 가득 차게 나타낸다.
Text Color : 텍스트의 색을 나타낸다.
Shadow : 그림자 색을 나타낸다.
Shadow : 그림자의 위치를 설정한다.
Drawing : Highlight Reverses Direction, Shows Touch On Highlight, Highlighted Adjusts Image, Disabled Adjusts Image 의 네가지 항목을 설정할 수 있다.
Font : 텍스트의 종류와 크기를 설정한다.
Line Breaks : 텍스트가 라벨의 영역을 넘어설 경우 어떻게 표현할 것인지를 설정한다. Clip 은 텍스트가 그대로 잘려지고, Character wrap 과 word wrap 은 문자 단위로, 단어단위로 텍스트가 표현된다. Truncate Head, Middle, Tail 은 줄임표를 앞, 중간, 뒷 등 표시하는 위치를 설정한다.
Content, Title, Image Edge Inset : 버튼 내의 내용, 타이틀, 이미지가 표시될 위치를 설정한다. Top, Bottom, Left, Right 는 각각 기준이 되는 위치를 말한다. Top 의 경우 위를 기준으로 숫자가 커질 수록 아래로 내려가게 된다.

▼ Control
Content : 각 오브젝트들의 정렬방식을 정할 수 있다. 그림을 보면 이해할 수 있으므로 보고 알맞은 것으로 정렬을 하면 된다. Highlighted, Selected, Enabled 의 추가적인 선택 사항들이 있다. 어떤 오브젝트들을 선택하고, 정렬에 포함할 것인지에 대해 결정하게 된다.

▼ View
Mode : 뷰에서 상속을 받아 갖고 있는 속성이기 때문에 이미지 뷰의 속성의 특징을 갖지만, 텍스트에서는 크게 영향을 주지 않는다.
Alpha : 이미지의 투명도를 조절하여 뒤에 있는 화면이 보이도록 한다. 숫자가 1 이하일 경우 투명도를 위한 연산을 해야 하기 때문에 필요할 때 이외에는 사용을 자제하도록 한다.
Background : 텍스트 배경 영역의 배경색을 지정한다. 특별한 이유가 없다면 투명상태로 유지한다.
Tag : 개발자가 각 컨트롤러를 구분하기 위해 임의의 태그를 줄 수 있다. 이 항목에 있어서는 IB 나 Xcode 등 애플리케이션이 임의로 변경할 수 없기 때문에 절대적인 구분이 가능하다.
Drawing : opaque 체크박스는 불투명 상태를 설정하게 된다. 알파값과의 차이점은 텍스트가 아닌 뷰에 직접 적용된다는 것이다. Hidden 체크박스는 컨트롤를 숨기는 역할을 한다. Clear Context Before Drawing 체크박스는 실제 컨트롤을 그릴 영역을 깨끗히 지운 후에 새로운 뷰를 그리게 한다. Clip Subviews 체크박스는 하위뷰가 있을 경우 어떻게 표현하지에 대해 설정한다. 체크할 경우 보여지지 않는 부분을 삭제 한 후에 이미지를 보여주게 되는데, 이것은 아이폰 OS 의 입장에서 삭제를 하지 않고 보여주는 것보다 더 자원을 소모하는 것이기 때문에 체크를 하지 않는 것이 기본 설정이다. Autoresize Subviews 체크박스는 뷰의 크기가 변경될 경우 포함되어 있는 하위 뷰의 크기도 변경되도록 한다.
Stretching : 표현하고자 하는 영역이 뷰보다 작을 경우 어떻게 확대할 것인지에 대한 설정을 할 수 있다. 이역시 텍스트에서는 크게 작용하지 않는다.
Interaction : User Interaction Enabled 는 사용자가 객체와 어떤 액션을 할 수 있도록 허용해준다. 이미지와 라벨의 경우는 대게 일반적인 정보만을 보여주기 대문에 이 옵션을 해제해 놓는다. 하지만, 버튼과 같이 액션이 필요할 경우엔 체크를 해 주어야 한다. Multiple Touch 멀티터치 이벤트를 허용할 것인가 이다. 멀티터치를 사용하지 않는다면 해제해 놓도록 한다.
Posted by seanhigher

댓글을 달아 주세요

Objective-C 프로그래밍을 경험해 봤다면 어색하게 느껴지지 않겠지만, 그렇지 않은 사람들에게는 IBOutlet과 IBAction이 무슨 역할을 하며 왜 필요한지에 대해서 의아해 할 것이다. 간단해 보이지만, 아이폰 프로그래밍에 있어서 없어서는 안될 중요한 존재이다. 이것들이 없다면 아무리 멋지게 프로그램을 작성하여도 연결선이 끊어진 조이스틱을 두드리는 것과 마찬가지가 되는 것이다.



아웃렛(IBOutlet)
아웃렛은 IBOutlet 키워드를 사용하여 선언하는 인스턴스 변수들이다. 아웃렛이 하는 역할은 정말로 단순하다. 컨트롤러 헤더 파일에 선언한 객체를 인터페이스 빌더가 알아 볼 수 있도록 해준다. xib파일 안의 객체와 연결을 하고자 하는 모든 인스턴스 변수들은 IBOutlet 키워드로 다음과 같은 형식으로 선언이 되어야 한다.

@property (nonatomic, retain) IBOutlet UILabel *newLabel;

아웃렛으로 선언된 인스턴스 변수는 프로젝트가 빌드되면서 가장 먼저 전처리기에서 번역되고, 그것이 xib 파일과 연결된 객체라는 사실이 컴파일러에게 전달된다. 프로젝트의 실행과 관련된 컴파일에서는 아무런 영향을 미치지 않는것이다. 하지만, 이것이 없다면 인터페이스 빌더는 어떻게 객채들과 연결해야 할지 모른체 빌드를 실행하게 될 것이다. 마치 지금 당장 전화를 걸어야 하는 상황에서 어떤 전화기를 가지고 어디로 전화를 해야 할찌 모르는 상황과 비슷하다고 할 수 있다.


액션(IBAction)
액션은 IBOutlet과 마찬가지로 컨트롤러 헤더파일에서 하나의 메소드 형태로 선언되어 그 역할을 하게 된다. IBAction이 선언되면 이 메소드가 액션 메소드라는 것을 인터페이스 빌더에게 알려주게 되며, 컨트롤러를 통해서 호출이 가능해 진다. 액션 메소드는 헤더파일에서 다음과 같은 형식으로 선언된다.

 - (IBAction)newAction:(id)sender;

메소드의 형식을 갖는 IBAction는 void를 리턴 타입으로 가진다. 액션 메소드는 변수값을 리턴하지 않는다는 것이다. 액션 메소드는 하나의 인자값을 갖게 되는데, 이것은 sender라는 이름의 id 타입으로 정의되고, 포인터 값이 전달된다. 이것은 똑같은 액션 메소드를 호출하는데 있어서 어떤 액션을 통해서 메소드를 호출하였는지 구분하는 구분자의 역할을 하게 된다. 만약 버튼이 하나밖에 없는 것 처럼, 액션의 구분이 필요하지 않다면 뒷부분의 '(id)sender' 를 제거하고 작성하면 가능하다. 하지만 버튼이 여러게 있는데 '(id)sender' 를 제거하면 모든 버튼이 동일한 역할만을 하게 될 것이다.


생성자와 변경자를 자동으로 생성해주는 @property를 선언하자!
C++ 나 JAVA같은 객체지향 언어를 다루다 보면, 기능을 모듈화 하고, 데이터를 보호하기 위해 하나의 객체에 생성자와 변경자를 만드는 것을 보게 된다. 생성하는 클래스나 객체가 적을때는 그리 어렵지 않겠지만, 늘어나는 클래스 객체의 getter(생성자 메소드)와 setter(변경자 메소드)를 일일이 생성하는 것은 매우 지루한 일이 될 수 있다. Objective-C에서의 프로퍼티는 이러한 Getter 와 Setter를 자동으로 생성해 주어 개발자의 수고를 조금이나마 덜어준다. 오브젝티브 C의 프로퍼티에는 몇가지 속성들이 있는데 retain, nonatomic 의 두가지의 속성은 아이폰 애플리케이션을 작성하는데 있어서 많이 사용되는 속성이다.

retain : 리테인은 메모리에 할당된 특정 객체를 참조하는 것을 의미한다. 각 객체는 리테인 카운트라는 데이터를 가지게 되는데, 객체가 호출될때마다 카운트 값을 증가시키고, 릴리즈 될때에는 카운트 값을 하나 감소시키면서 그 객체가 사용되고 있는지의 여부를 판단하게 된다. 이것은 메모리를 효율적으로 관리하기 위한 하나의 수단으로 이용된다.

nonatomic : 접근자와 변경자 메소드가 생성되는 방법을 바꾼다. 이 옵션에 대해 디폴트로 설정되어 있는 atomic의 경우 멀티 스레딩이 가능한 코드들을 추가로 생성하게 된다. 하지만 명시적으로 nonatomic을 설정함으로 멀티 스레딩의 가능성을 줄이고, 불필요한 것들로 인한 오버헤드를 상당부분 줄일 수 있다. 어느정도 자원 사용에 있어서 한계가 있는 아이폰 프로그래밍의 경우, 메모리에 사용에 대한 치밀한 접근이 필요하다.



아웃렛, 액션, 프로퍼티는 아이폰 프로그래밍을 하는데 있어서 필수적인 요소들이다. 어렵지 않은 역할을 가지고 있지만, 그 기본을 탄탄히 함으로써 좀더 규모있는 애플리케이션을 다루게 될때 당황하지 않고 적절하게 대응할 수 있는 것이다.

Posted by seanhigher

댓글을 달아 주세요

  1. 2010.10.12 00:38 신고 금메달.아빠  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다. 구글에서 검색하였더니 http://blog.daum.net/yellowjini/5216139 에도 이글과 똑같은 글이 나오는 군요. 누가 원본인지 모르겠지만, 블로그 올리신 시각이 빠른 분께 이렇게 댓글을 남겨 둡니다.
    아이폰을 다루지 못해봐서 아직 이해하기에 먼 글입니다. 아이폰을 다룰 기회가 되면 다시 들러봐야 겠습니다.

    행복한 하루 되세요.

아이콘은 그것을 나타내는 프로그램이 어떤 의미를 가지고 있는지 함축적으로 표현해 준다. 프로그램을 잘 표현해 낸 아이콘 하나만으로도 더 많은 사람들이 자신이 만든 애플리케이션에 관심을 갖게 만들 수 있다. 비행기를 보지 못한 원시인들에게 열심히 글로 써 주어도 이해하기 힘들지만, 사람들이 비행기를 타고 날아가는 모습의 그림이나 아이콘을 통해 표현한다면 훨씬 쉽게 이해할 수 있을 것이다.


하얀 아이콘.
맨 처음 'Hello world!를 나타내는 앱을 만들었을때는, 그것이 아이폰 화면에 나타난다는 것 만으로도 만족스럽고 충분했다. 하지만, 홈 버튼을 눌러서 자신의 앱이 표현되어 있는 아이콘을 보게 되면... 그저 밋밋한 하얀색의 네모만 보이는 아이콘.


그림1. 밋밋한 아이콘 화면.

동글동글하게 보이는 것이 예쁘게 보이기는 하지만, 왠지 없어 보인다. 다른 앱의 아이콘들처럼 나만의 아이콘으로 표현 할 수 있는 방법은 없는 걸까? 물론, 당연히 방법은 있다. 그것도 정말 쉬운 방법이!!


나만의 앱에 나만의 아이콘으로 나타내기.
아이폰 프로젝트에 사용되는 소스 외의 데이터들은 'Resources'폴더 안에 포함된다. 예상 했겠지만, 아이콘으로 사용되는 이미지 역시 'Resources'폴더 안에 포함시켜야 한다. 아이콘으로 사용되는 이미지는 가로세로 57 x 57 pixels 로 된 png 파일이 가장 적당하다. png 파일이 아닌 아이폰에서 사용 가능한 모든 형태의 이미지 파일이 가능하지만, 되도록이면 png 파일을 사용하는 것이 좋다. 아이폰에서는 png 파일이 가장 최적화 되어있기 때문이다.


그림2. icon.png 파일(57 x 57 pixels)

또 아이콘을 만들때 한가지 주의할 점은 다른 아이폰 앱의 아이콘처럼 모서리를 둥글게 하고 효과를 주려고 하지 않아도 된다. 정사각형의 이미지를 만들어 주면, 테마에 맞게 아이폰 SDK에서 알아서 효과를 적용해 주어 멋있게 보이게끔 만들어 준다. 아이콘 파일을 프로젝트에 포함하기 위해서는 두가지 방법이 있다. 매우 직관적으로 'Resources' 폴더로 아이콘 파일을 드래그 하여 놓는 방법과 'Resources'폴더에 서 우클릭으로 메뉴를 호출하여 'Add' -> 'Existing Files...'를 선택하는 방법이다. 각자 상황에 맞게 알맞는 방법으로 아이콘을 추가하면 된다.


그림3. 'Resources' 폴더에 파일 추가.

'Resources' 폴더에 아이콘 파일을 추가하려고 하면 아래와 같은 창이 생기는데, 참조하는 파일이 적을 경우 세심하게 신경쓰지 않아도 되기 때문에 기본 설정으로 놓도록 한다.

그림4. 아이콘 파일을 추가하는 화면.

맨 위에 있는 'Copy items into destination group's folder(if needed)' 항목은 참조하고자 하는 파일을 가져올 때 복사를 할것인지 묻는 것이다. 체크를 하게 되면 파일을 그대로 프로젝트 폴더로 복사하여 가져오게 되고, 체크를 해제하면 단지 링크로만 연결을 시켜 놓는다. 복사할 경우는 원본이 사라져도 상관이 없지만, 이미지의 수정이 필요할 경우 프로젝트 폴더내의 파일을 수정하거나, 다시 참조해야 하는 번거로움이 있고, 링크를 해 놓은 경우는 수정은 용이하지만, 원본 파일의 위치가 변경될 경우 찾아서 다시 링크를 설정해 주어야 하는 번거로움이 있다. 우선은 기본적으로 복사를 하는 것이 프로젝트를 개발하는데 편한듯 하다.


그림5. 'Hello_World-Info.plist' 파일

아이콘으로 사용하는 파일의 이름을 icon.png 로 저장했다면 별다른 설정없이 바로 아이콘으로 적용이 된다.(아이콘 파일을 설정하지 않을 경우 기본으로 icon.png 파일을 찾아서 참조하도록 되어 있다.) 하지만, 파일 이름이 icon.png 가 아닐경우는 아이콘 파일이 이것이다 라고 지정을 해 주어야 한다. '프로젝트 명-Info.plist'파일은 아이콘 파일의 설정 외에도, 애플리케이션의 기본적이고, 필요한 정보들을 포함하고 있다. Xcode 창에서 'Hello world-Info.plist'파일을 선택하면 오른쪽에 위와 같은 목록들이 나오는 것을 볼 수 있다. 이중 'Key' 값에 icon file 이라고 써있는 영역에 아이콘 파일의 이름을 적어 놓는다.


그림6. 아이콘 파일이 적용된 앰 아이콘 화면.

이제 Xcode 창에서 다시 빌드를 하고 실행을 시키면 위 그림과 같이 자연스럽게 효과가 적용된 앱 아이콘을 볼 수 있을 것이다. 나의 아이덴티티를 가지는 특별한 아이콘으로 무장한 'Hello world' 앱이 탄생하였다.

Posted by seanhigher

댓글을 달아 주세요

  1. 2010.04.06 20:55  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

코코아 프로그래밍을 하기 위해서, 또는 아이폰 프로그래밍을 하기 위해서 필요한 것이 Xcode라고 불리는 애플리케이션 제작 툴이다. Xcode는 프로그래밍을 하는데 있어서 쉽고, 간결하게 할 수 있도록 다양한 방법으로 개발자들을 돕고 있다. 그리고 무엇보다도 보기에 좋다는 것!



Xcode project 만들기
맨 처음 Xcode를 실행하게 되면 개발자들을 환영하는 메세지를 볼 수 있다. 처음 나타나는 메세지에서는 새로운 프로젝트를 생성하거나, 이전에 작업하고 있던 프로젝트를 선택 할 수 있다. 그리고 처음 Xcode를 사용하는 사용자들을 위한 튜토리얼과 개발자들을 위한 웹페이지의 링크도 선택할 수 있기 때문에 한번즘 클릭해 보는것도 나쁘진 않을 것이다. 그리고 매번 시작할때 마다 환영 페이지를 보고 싶지 않다면 'Show this windows when Xcode launches'의 체크 박스를 해제하면 된다. 새로운 프로젝트를 생성하기 위해서 'Create a new Xcode project'를 선택한다.


그림1. New Project 선택 화면

그러면 위와 같은 새 프로젝트 선택 화면을 볼 수가 있을 것이다. OS X에서 실행이 되는 응용 애플리케이션을 개발하고자 한다면 왼쪽의 OS X 탭 아래의 메뉴에서 선택을 하면 되고, iPhone용 애플리케이션을 개발하고자 한다면 iPhone 탭 아래에서 적당한 메뉴를 선택하면 된다. 가장 기본이 되는 애플리케이션을 만들기 위해서는 iPhone -> Application -> View based Application 을 선택하도록 한다. 애플리케이션의 이름을 정하고, 저장할 위치를 묻는 화면이 나오는데, 기본으로 설정되어 있는 디렉토리를 사용해도 상관없지만, 다른 데이터와 혼동이 될 수 있으므로, iPhone 프로젝트만을 위한 디렉토리를 따로 생성하여 설정하기를 권한다.


Xcode 'Hello world' project 창 보기.
프로젝트를 생성할 장소까지 설정을 했다면 다음과 같은 프로젝트 화면을 볼 수가 있을 것이다.


그림2. 'Hello World' project

단지 프로젝트 이름만 지어줬을 뿐인데 이미 많은 파일들이 생성되어 있는 것을 볼 수가 있다. 이것들은 개발자의 편의를 위해서 Xcode가 자동으로 기본 템플릿을 가지고 생성해낸 파일들이다. 나중에는 세심하게 살펴 보겠지만, 처음에는 자동으로 파일들이 여러개 생성된다는 사실만으로도 충분하다. 왼쪽에 있는 'Group&Files'는 프로젝트안에 포함되는 다양한 파일들이 들어가 있다. 소스 파일이 포함될 수도 있고, 이미지나, 텍스트, 음성 데이터들이 포함될 수 있다. 각각의 폴더가 의미하는 바는 다음과 같다.

Classes : object-C 클래스 파일들이 모여 있는 곳이다. 개발자가 생성하는 파일들이 들어가는 곳이기도 하다.
Other Sources : object-C 클래스 파일이 아닌 소스코드 파일들이 포함된다. 그리고 맨 처음 프로젝트를 생성하게 되면 두가지의 파일이 자동으로 생성되게 된다. '프로젝트명_Prefix.pch'란 파일과 main.m 파일이다. Prefix.pch는 precompiled header의 약자로 일반적으로 프로젝트를 생성하는데 있어서 꼭 필요한 헤더 파일들을 컴파일 해 놓는 것이다. 기본적으로 사용하는 헤더 파일들을 미리 컴파일 해 놓으면 프로젝트를 빌드 할때 시간을 절약 할 수 있다. main.m 파일은 main() 메소드가 있는 곳으로 MVC 구조를 사용하는 오브젝티브-C의 특성상 수정할 경우가 많지 않다.
Resources : 애플리케이션에 사용되는 파일들이 포함되어 있는 곳이다. 프로그램을 구동하는데 필요한 코드가 아니라 아이콘, 이미지, 소리파일, 동영상등 프로그램을 실행하는데 있어서 필요할 만한 자원들을 보관하는 곳이다. 아이폰에서는 허가된 위치의 파일들 외에는 임의로 접근이 불가능 하기 때문에 실행에 필요한 파일들은 꼭 이 위치에 보관해야 한다. 이 폴더에는 다음의 세가지 파일이 자동으로 생성 된다. '프로젝트 명ViewController.xib', '프로젝트 명-Info.plist', 'MainWindow.xib'. 이 세가지 파일은 프로그램을 실행하는데 꼭 필요한 파일들이기도 하다.
Framework : 이 폴더는 코드, 이미지나, 소리데이터등의 자원들이 포함되어 있는 라이브러리이다. 이 폴더에 포함되는 프레임워크는 자동으로 프로젝트에 링크되어 사용할 수 있게 된다. 기본적으로 사용되는 프레임워크에 포함되지 않는 프레임워크를 사용하고자 할 경우 이 폴더에 포함시킨다.
Products : 프로젝트를 통해 생성된 애플리케이션이 저장되는 곳이다. '프로젝트 명.app'이 프로젝트의 결과물이 된다. 위 그림에서 보면 Hello World.app이 빨간색으로 되어 있는데, 이것은 아직 빌드를 한번도 실행하지 않았기 때문에 파일을 찾을 수 없다는 의미이다.

'Group&Files' 의 창에 표현되는 디렉토리 구조는 OS X 의 디렉토리 구조와 완벽하게 일치하지 않는다. 왜냐하면 'Group&Files'에서 보여주는 디렉토리의 구조는 프로젝트를 작성하는데 있어서 편리하도록 만들어낸 논리적 구조이기 때문이다. 파일을 그대로 복사해서 가져올 수도 있지만, 단지 링크만을 해 둘 수도 있다. 이것은 옵션으로 선택이 가능하다.


Interface Builder 둘러보기.
Xcode를 완성하는 또 하나의 창은 IB라고 하는 인터페이스 빌더이다. 프로젝트창이 보이지 않는 소스코드에 중점을 둔다면, 인터페이스빌더는 프로그램의 외형을 아름답게 꾸미는 일을 책임진다. 개발자가 만들고자 하는 프로그램에 버튼을 하나 추가하고 싶다면 버튼을 의미하는 소스코드를 입력해서 만들 수도 있지만, 인터페이스 빌더를 사용하면 마우스 클릭만으로 간단하게 버튼을 추가 할 수 있다. 이것은 MVC 패턴에 맞추어서 기능과 뷰를 분리하였기 때문에 가능하다. 또한 인터페이스를 만드는데 드는 시간을 줄 일 수 있으며, 좀더 직관적인 디자인이 가능하다는 이점이 있다. 생성한 프로젝트에서 IB의 화면을 보기 위해서는 IB를 책임지고 있는 파일을 선택하면 된다. Resources 폴더의 '프로젝트 명ViewController.xib'파일을 더블클릭한다.


그림3. Interface Builder 의 화면


처음 IB를 실행하게 되면 위와 같이 여러개의 창이 나타나는 것을 볼 수 있다. 이중에서 가장 메인이 되는 창은 가운데 위에 있는 '프로젝트 명ViewController.xib'라고 써 있는 창이다. 인터페이스를 책임지는 모든 xib 파일은 File's Owner와 First Responder 이라는 두개의 파일을 자동으로 포함하게 된다. File's Owner는 xib파일의 객체를 의미한다. 객체지향 프로그래밍에서는 어떠한 오브젝트를 사용하기 위해서 객체를 생성하는데, File's Owner가 첫번째 객체의 역할을 하는 것이다. First Responder는 현재 사용자와 프로그램이 상호작용을 하고 있는 객체를 의미한다. '1' ~ '9'로 표현되는 버튼을 생성하였다. 이 때 사용자가 '2'라는 버튼을 눌렀다면 '2'라는 버튼은 현재의 퍼스트 리스폰더이다. 퍼스트 리스폰더는 그 때에 작용하는 객체를 말하기 때문에, 사용자와 상호 작용을 하는데 있어서 매우 중요한 역할을 한다. 그리고 'View'라는 아이콘이 포함되어 있는 것을 볼 수 있는데, 이것은 화면에 나타나는 '뷰'를 의미한다. 지금 당장에는 하나의 뷰만을 가진 애플리케이션을 작성하기 때문에 하나밖에 없지만, 좀더 복잡한 애플리케이션을 작성하게 되면 여러개의 뷰가 생성 될 것이다.


프로젝트 창과 인터페이스 빌더는 iPhone 프로그래밍이나, 코코아 프로그래밍을 하는데 있어서 매우 중요한 요소이다. 그리고 개발자들이 가장 기본적으로 사용하게 되는 창이기도 하다. 이 두개의 화면에 익숙해진다면 아이폰 프로그래밍을 하는 것도 그렇게 어렵게 느껴지지 않을 것이다.

Posted by seanhigher

댓글을 달아 주세요

전세계적으로 아이폰의 열풍은 대단하다. 전화만 가능했던 단순한 피처폰에서 뭐든지 '다' 된다는 스마트폰으로의 세대변화를 이끈 주역이라고 할 수 있다. 그리고 이러한 아이폰을 더욱 더 강력하게 만드는 애플의 CEO인 스티브 잡스의 대중을 사로잡는 마력과, 10만개를 훌쩍 넘어버린 아이폰 앱 스토어의 풍부한 애플리케이션이 있었기 때문이다.


OS X
아이폰 개발을 하기위해서는 특별한 개발 환경이 필요하다. 바로 OS X 이다. 윈도우, 리눅스와는 다른 애플만의 직관적인 OS이다. 애플은 처음 애플 컴퓨터를 만들때 부터 하드웨어와 소프트웨어를 통일하여 만들어왔다. 유닉스 기반의 안정적이고 사용하기 편안 컴퓨터를 모토로 개발해 온 것이 지금의 iMac을 만들게 되었다. 그와 함께 발전하게 된것이 OS X 이다. 이전에는 모든 부품들을 애플에서 만들었지만, 2006년 인텔의 CPU를 사용하면서 좀더 경제적인 제품을 생산하게 되었고, 부트캠프의 사용과 함께 조금은 더 나아진 호완성을 가지게 되었다. 이때부터 애플은 아이맥이 널리 알려지게 되었고, 많은 사람들이 한번쯤은 가져보고 싶은 아이템이 되었다. 인텔칩을 사용하게 된 애플덕분에 일반 컴퓨터에서도 해킨토시라 하여 불법으로 개조된 OS X 가 인터넷 상에 돌아다니게 되었으며, 이것은 애플을 더욱 더 알리는 계기가 되었다.


Objective-C
유닉스 기반의 오에스 텐은 일반적인 C언어가 아닌 오브젝티브 C 언어를 사용하고 있다. 순차적인 C의 단점을 보완한 오브젝티브 C는 객체 지향적인 관점에서 좀더 편안한 프로그래밍을 제공해주며, 유연함과, 풍부한 라이브러리, M(model)-V(view)-C(control)의 프로그래밍 구조를 확고히 하였다. 개발자들이 창의적인 생각으로 개발을 할 수 있도록 여건을 만들어 주었다.


Xcode
엑스코드는 애플의 코코아(Objective-C)프로그래밍을 가능하도록 하는 통합개발도구이다. 너무나도 직관적인 인터페이스를 만들어주는 IB(InterfaceBulider)은 이미 많은 프로그래머로 하여금 Xcode와 코코아 프로그래밍에 빠져들게 만들었다. 코코아 터치를 사용하는 아이폰 프로그래밍은 Xcode 도구를 통해서 개발에 참여할 수 있다. 새롭긴 하지만, 조금만 해본다면 그 편리함에 놀라게 될 것이다.


Xcode for iPhone SDK 설치하기.
애플제품을 사용하는, 아니 애플 사이트에 등록한 사람이라면 누구나 Xcode를 다운로드 받을 수 있다. 물론 OS X에서만 설치할 수 있다는 단점이 있긴 하지만... 아이폰 SDK는 애플개발자센터에서 다운로드 받을 수 있다.


그림1. 애플 개발자 센터

애플 개발자 센터는 크게 세가지로 나뉘어 지는데, 맨 처음에 있는 'iPhone Dev Center'을 선택하도록 한다.


그림2. 로그인

SDK를 다운로드 받기 위해서는 로그인이 필요하다.


그림3. 아이폰 개발자 페이지

로그인을 하면 위와 같은 화면을 볼 수 있다. 맨 위의 다운로드를 선택하여 다운로드 페이지로 이동할 수 있다. 이미 Xcode가 설치되어 있는 사람이라도 다시 iPhone SDK를 다운로드 받아서 설치하면 된다. Leopard나 snow Leopard는 상관없지만, Tiger이전의 버전은 Xcode 2.x 버전을 다운로드 받아 설치해야 한다.


그림4. iPhone SDK 디스크 이미지 파일

'iPhone SDK and Tools for Snow Leopard' 패키지를 클릭하여 설치를 진행한다.


그림5. 설치 시작 화면


그림6. 설치 동의

설치를 하는데는 그리 어려운 부분들이 없다. 설치에 관한 동의를 몇번 하고, 설치 위치, 설치 항목들을 선택하고 나면 Xcode의 설치가 완료된다.


그림7. iTunes 종료 요청 메시지.

iPhone SDK를 설치하는 도중에 iTunes가 실행되고 있다면 위와 같이 종료하고 설치를 진행해 달라는 메시지가 나온다.


그림8. 설치 완료.

설치가 진행되고 위와 같이 설치가 완료되었다는 메시지를 볼 수 있다.


그림9. iPhone SDK의 실행파일 위치

iPhone SDK(Xcode)는 자신의 하드의 'Developer -> Applications' 디렉토리에서 Xcode라는 실행파일을 찾을 수 있다.


그림10. iPhone SDK 실행 화면.

Xcode를 실행하면 환영 메시지 후에, 위와 같은 화면을 볼 수 있을 것이다. 왼쪽에 보면 알 수 있듯이, 윗부분은 아이폰 애플리케이션을 위한 프로젝트가 있고, 아래쪽에는 OS X 애플리케이션을 위한 텝이 자리하고 있다. 이제부터 하나씩 아이폰 개발을 배워보도록 하자.



Posted by seanhigher

댓글을 달아 주세요

최근에 달린 댓글

글 보관함