1.3.1 소스코드 생성
1) 소스코드 생성

사용자 삽입 이미지
툴바에서 Action버튼을 클릭하여 Add/New File... 을 클릭합니다. 키보드에서 [Command + N]을 누르거나 Xcode메뉴에서 File/New File을 클릭해도 같습니다.



다음 나타나는 메뉴에서 아래와 같이 Cocoa/Objective-C class를 선택 하고, 하단의 Next 버튼을 클릭합니다.
사용자 삽입 이미지

다음 메뉴에서 File Name을 아래와 같이 AppController로 입력하고, Finish 버튼을  클릭합니다. (Object-C에서 헤더는 *.h, 소스파일은 *.m이 확장자 입니다)
사용자 삽입 이미지

Xcode 좌측 메뉴를 보면 아래와 같이 AppController.h, AppController.m 두개의 파일이 생성되어 있습니다. 우측과 같이 두 파일을 드래그해서 Classes 그룹 밑으로 둡니다. 옮기지 않아도 상과 없으나, 성격에 맞는 그룹에 정리해 두는 것이 좋습니다.
사용자 삽입 이미지사용자 삽입 이미지

2) 소스코드 수정

AppController.h 파일을 열고 아래와 같이 추가 합니다. 좌측 파일 목록 에서 해당 파일을 더블 클릭 하거나, 마우스로 클릭 후, 툴바의 Editor를 클릭 합니다.
/* AppController */

#import <Cocoa/Cocoa.h>

@interface AppController : NSObject
{
    IBOutlet id myText;
}

- (IBAction)changeText:(id)sender;
@end

헤더파일을 보면 Java나 C/C++을 아는 분들은 익숙하면서도 뭔가 생소한 느낌이 들 것 입니다. 아래의 내용은 기존에 다른 개발 언어를 경험해 보신 분들은 참고 하시고, 아니면 그냥 건너  뛰시면 됩니다.
 
1. 주석
우선은 주석이 C, Java와 동일하게 "/*" 로 시갖해서 "*/"로 끝난다는 것을 알 수 있습니다.

2. 헤더파일 인클루드
#import로 필요한 헤더파일을 포함하는데, C와 같이 #를 전처리기로 사용하고 Java와 같이 include 대신에 import를 사용합니다.(C와 다른 점은 중복될 경우에는 오류없이 하나만 포함합니다.)

3. 클래스 선언
클랙스는 @interface로 시작해서 @end로 끝이 납니다. 맴버 변수(속성)만 { }에 포함되고 맴버 함수(메소드)는 {} 밖에서 선언되는 것 같습니다.

4. 접두어
cocoa에서는 내장 클래스들이 NS라는 접두어를 사용하고 있습니다.  NextSTEP의 NS에서 온 것 같다는 생각이 들지만 확실하지는 않습니다.

IB로 시작되는 것은 Interface Builder에서 연결된다는 의미인 것 같습니다. 둘 다 자동화를 위한 Xcoide의 예약어로 생각하시면 될 것 같습니다. (IBAction)은 리턴 값 타입이 오는 자리이지만 IBAction은 void와 같습니다.

아래 두개의 라인이 추가되었습니다.
IBOutlet id myText;
    윈도우의 Hellow World가 있는 텍스트 필드에 연결될 변수 입니다.

- (IBAction)changeText:(id)sender;
    변경 버튼이 클릭되었을 때 연결될 메소드 입니다.

이젠 AppController.m 파일을 오픈 합니다.
#import "AppController.h"

@implementation AppController
- (IBAction)changeText:(id)sender
{
    [myText setStringValue:@"Hello World!];
    NSLog(@"Text changed");
}
@end

AppControll.h에서 선언 해 놓은 ChangeMyText 메소드를 구현 합니다. 이 메소드는 변경 버튼이 클릭되었을 때, 실행됩니다.

[myText setStringValue:@"Hello World!];
버튼이 클릭되면 myText(Hello World 택스트 필드)가 "Hellow World!"로 문자를 변경하라는 의미입니다. Hello World! 다음에 "로 막아야 하지만, 오류 메시지를 보기 위해 입력하지 않았습니다.
사용자 삽입 이미지사용자 삽입 이미지

NSLog(@"Text changed");
Log윈도우에 메세지를 출력해 주는 함수 입니다. 변수값 확인, 오류를 찾거나 수행여부를 확인할 때 사용할 수 있습니다.

이제 툴바의 Build 버튼([command + b])을 클릭 해서 컴파일을 합니다. 하단을 보면 컴파일 중이라는 메시지 두에 Build failed (2 errors)란 메시지를 볼 수 있습니다. 2개의 오류가 생겨서 컴파일을 완료하지 못했다는 뜻 입니다.
사용자 삽입 이미지

에디터를 보면 위와 같이 X 마트로 오류가 난 위치가 표시되어 있습니다. 상세한 오류 메시지를 보실려면 좌측의 Errors and Warnings를 클릭한 후 파일별로 내용을 확인할 수 있습니다.

또는 메뉴바에서 Build/Build results [shift + command + b]를 클릭하시면, 아래와 같이 컴파일 결과를 확인할 수 있습니다.
사용자 삽입 이미지
에디터에서 다음 오류 라인은 [command + =], 이전 오류 라인은 [command + shift + =]로 오류지점으로 이동할 수 있습니다.

[myText setStringValue:@"Hello World!"];
이제 위와 같이 Hellow World! 뒤에 "를 입력하고 Build and Go [command + r]
를 클릭 합니다. 실행이 되면 이전과 마찬가지로 아직은 어떠한 작동도 하지 않습니다. 이제 버튼 클릭에 동작하는 작업을 해보도록 하겠습니다.


1.3.2 인터페이스 빌더에서 추가 작업
다시 Xcode로 돌아 와 좌측 메뉴의 NIB Files/MainMenu.nib를 더블클릭 하여 인터페이스 빌더를 엽니다.

Xcode에서 AppController.h가 저장되어 있음을 확인합니다. 아래 좌측과 같이 m 아이콘이 어두우면 소스 변경 후 저장이 되지 않은 상태이며, 흰색이면 최종 변경 후 저장되어 있는 상태 입니다.
사용자 삽입 이미지사용자 삽입 이미지

1) AppController.h 등록  과 인스턴스 생성

아래와 같이 Xcode의 좌측 메뉴에서 AppController.h를 드래그 하여 인터페이스 빌더의 Instances 윈도우로 가져다 놓습니다.
사용자 삽입 이미지

완료되면 아래와 같이 Classes 윈도우에 AppController가 등록되어 있는 것을 확인할 수 있습니다.
사용자 삽입 이미지

사용자 삽입 이미지
위에 보이는 AppController를 마우스 우측 버튼으로 클릭(control + 클릭)하시면, 좌측과 같은 메뉴가 나옵니다. 여기서  Instantiate  AppController를 클릭 합니다.


Instances 윈도우에 AppController 라는 인스턴스가 생성되었습니다.
사용자 삽입 이미지

2) 버튼 등록

이제 윈도우에 버튼을 추가 합니다. 아래 왼쪽 그림과 같이 팔레트의 두번째 버튼 항목에서  버튼을 클릭 후 드래그 해서 오른쪽 그림에서 보이는 윈도우의 적당한 위치에 가져다 놓습니다. 그 후 버튼을 더블클릭하여 Button이라는 문자를 "바꾸기"로 변경합니다.
사용자 삽입 이미지사용자 삽입 이미지

3) changeText와 버튼 연결

버튼이 추가되면 이제 버튼 클릭시  AppController에서 만들어 놓은 changeText 메소드로 연결 합니다. control 키를 누른 상태에서 마우스 버튼을 바꾸기 버튼에 누른 상태에서 라인이 생기면 AppController의 인스턴스(파란  네모 상자)에다 놓습니다.

그러면 Inspector의 Connections의 Target/Action에서 아래 왼쪽 그림과 같이 changeText 항목이 나타나는데, 이를 선택하면 아래의 connect 버튼이 활성화 된다. connect 버튼을 클릭하면 changeText 앞에 아이콘이 나타나며 연결됩니다.
사용자 삽입 이미지사용자 삽입 이미지
이제 버튼이 클릭되면 AppController의 changeText 메소드로 연결됩니다.

4) myText와 텍스트필드 연결

텍스트필드와 AppController의 myText를 연결합니다. 다시 control 키를 누른 상태에서 위와는 반대로 AppConroller(파란 네모 상자)를 마우스 버튼을 클릭하여 라인이 생기면 Hello World라고 되어 있는 텍스트 필드에 연결합니다.

연결이 되면 위와 같이 Inspector가 나오는데, Connections의 Outlets에서 왼쪽 그림과 같이 myText 항목이 있다. 위와 같이 myText를 선택하고 connect를  클릭하고, myText 앞에 아이콘이 있어 연결이 되었는지 확인 합니다.
사용자 삽입 이미지사용자 삽입 이미지
이제 myText와 텍스트 필드가 연결되었습니다. Build And Go 버튼을 눌러 컴파일을 하고 잘 동작하는지 테스트를 해봅니다.

5) 실행 및 확인
컴파일이 오류없이 완료되면 Hello 윈도우가 실행됩니다. 바꾸기 버튼을 클릭하면 "!"가 추가된 텍스트로 오른쪽 아래와 같이 변경됩니다.
사용자 삽입 이미지사용자 삽입 이미지

Xcode를 보면 버튼 클릭 시, 아래와 같이 NCLog에서 출력하는 "Text changed"란 메세지가 나옵니다.
사용자 삽입 이미지

 
모든 댓글을 환영합니다. (욕설과 광고는 삭제합니다.)
  1. Mr X 2008.07.12 23:53  댓글주소  수정/삭제  댓글쓰기

    코코아를 공부하려고 찾다가 보니 여기까지 오게 되었군요...

    이런식의 코코아 튜토리얼이 울나라에선 참 귀하기 때문에 정말 고맙게 생각하고 있습니다.

    근데...

    제가 가진 Xcode가 신버전이라서 그런지(3.0) 꽤나 많은 부분이 다르더군요...(뭐 고수의 눈으로 찬찬히 본다면 별로 차이도 없겠지만...)

    그 덕인지...

    클래스 헤더파일을 인터페이스 빌더의 인스턴스 윈도우로 드래드&드랍을 하여도 전혀 반응이 없더군요

    이거 신버전에서는 어떻게 해야 되는지 좀 알려주시길 바랍니다.

    Hello World 만들기가 이렇게나 힘들어서야~ T.T

  2. Mr X 2008.07.13 15:43  댓글주소  수정/삭제  댓글쓰기

    혼자서 열심히 닭질하다가 보니 엉겁결에 찾아졌습니다.

    이전 버전의 인터페이스빌더에서는 그냥 드래그&드랍만으로 클래스가 등록이 되었지만 이제 인터페이스빌더 3.x에서는 Object(NS Object)를 하나 인스턴트 윈도우로 드랙&드랍한 다음 거기에 원하는 클래스 이름을 입력하는 압식으로 바뀌었더군요...

    좋아진건지 나빠진건지... -.-;;;;

    그나저나 이번 Xcode 3.x(특히 인터페이스빌더 3.x)에서는 꽤나 많은 부분이 바뀌어서 새로 배워야 될지도 모르겠다고 투덜거리지는 분들이 계시더군요...

    쩝...

    이런 부분은 미리 좀 설명을 해주지 애플 미오~ T.T

    • Favicon of https://www.cocoadev.co.kr BlogIcon cocoadev 2008.07.13 15:53 신고  댓글주소  수정/삭제

      해답을 찾으셨다니 다행이네요. ^^;; 저도 3.X대 버젼은 제대로 사용해 본 적이 없어 잘 모르겠습니다. 3.X대는 8월 부터 사용해보고 공부하면서 포스팅을 해볼려고 합니다.

      방문해 주셔서 좋은 말씀 감사합니다. :)