iPhone 프로그래밍을 들어가기 전에 배워야 할 기본적인 Objective C에 대해서 알아보자.

 

 Objective C는 Mac에서 쓰는 프로그래밍 언어이다.

 iPhone 프로그래밍을 하기 위해서는 반드시 알아야 하는 언어이다.

 이 내용은 원문 "Programming in Objective C 2.0"을 읽고 작성되었으며 철저히 기본 C와 C++를 익혔던 사람의 입장에서 쓰여졌다.

 그러므로 여기 내용이 이해가 가지 않는다면 C,C++를 먼저 정독하고 보거나, 그냥 서점에 있는 "Programming in Objective C 2.0"책을 사서 배우길 권한다.(하지만 이책 역시 C와 C++를 모르는 사람이 접하기엔 너무 간결하게 설명하고 있다..)

 

 그리고 나도아직 Objective C를 잘 모르는 상태에서 시작하는 것이니 완전한 설명은 기대하지 말자.

 

 이곳에서 언급되는 Objective C 내용들은 C와 다른 부분만 적을 것이므로, 나오지 않는부분은 C와 동일하다고 보면 된다.

 찾기 (Ctrl + F)를 사용하면 정보검색이 빠르다.

 

1.Xcode에서 기본 프로그래밍 환경 조성하기

 

 

Finder를 클릭후 자신의 하드디스크를 클릭하면, developer 폴더가 있다.

Developer -> Application -> Xcode를 실행시킨다.

 

 

요런 화면이 뜨면 Create New Xcode Project를 누른다.

 

 

거기서 왼족 하단에 Application을 클릭. 오른쪽 상단에 Command Line Tool을 선택하고 가운데에 Type를 "Foundation"으로 맞추고 choose를 누른다.

 (만약 저 type에서 C를 한다면 친근한 c문법을 기초로 하는 printf("Hello World");가 보일 것이다. 하지만 우리는 Objective C를 해야 하니 Foundation을 선택하자.)

 

 

 

요런 화면이 뜨는데 참 Visual Studio랑 닮은 것 같다. 왼쪽은 폴더들을 표시하고

오른쪽 상단은 폴더안에 파일들을 표시하고

제일 큰 부분을 차지하는 오른쪽 하단 창은 파일의 내용을 표시한다.

 

안에 이미 Hello World를 기본으로 출력해주는 프로그램이 완성되어 있으므로 위의 "Build and Go"를 클릭하면 실행된 화면을 볼수 있다.

.

.

.

 

 응? 아무것도 안보이는데?... 아.. 생각해보니 콘솔창은 Hello World를 출력하고 바로 사라진 모양이다. 콘솔창을 띄워서 어떻게 출력이 되었는지 보자.

 

 

상단메뉴에 RUN을 클릭해보면 Console이라고 있다. 그걸 눌러보면 막 난잡한 글속에 "Hello World"글귀가 보인다. 제대로 실행된 것이다.

 

 이정도면 Objective C 프로그래밍 연습할 준비가 되었다.

 

2.전처리구문

 

 C에서는

 #include <stdio.h>

 

 이렇게 하였으나

 

 Objective C에서는

 #import <Foundation/Foundation.h>

 

 이렇게 한다. Foundation.h는 stdio.h와 비슷한 입출력기능 같은 내용이 정의되어있는 헤더이다.

 

3. 확장자명

 

 C는 ***.c  ,   C++은 ***.cpp 확장자를 가지나

 Objective C는 ***.m   Objective C++는 ***.mm을 가진다

 

4. 출력구문

 

 C는 printf 함수를 사용하나 Objective C는 NSLog를 사용한다.

 

 예) NSLog(@"Hello World %i %i", a , b);

 

   printf에서는 정수형 인수를 %d로 표현하지만, 여기선 %i로 표현한다. 문자열 앞에 @는 NSLog에서 문자열을 출력하는데 쓰는 문법이므로 너무 크게 신경쓰진 말자.

 

5. 클래스 선언

 

C++에서

class Golf : NSObject

{

   int a;

   int b;

   void printMember(void)

}

 

void Golf::printMember(void)

{

 printf("a is %d, b is %d", a , b);

}

 

로 NSObject에서 상속된 Golf 클래스를 생성했다면

 

Objective C에서는

@interface Golf : NSObject

{

  int a;

  int b;

}

-(void) printMember;

 @end

 

@implementation Golf

 

-(void) printMember

{

 NSLog(@"a is %i, b is %i", a, b);

}

@end

 

로 표현한다.

 

 차이점은 @interface로 시작해서 @end로 끝난다는 점이다. interface안에서는 선언만 하고 메소드의 구현은 implementation에서 이루어진다.

 메소드 선언 부분의 '-(void) printMember'에서 맨앞에 -는

 

-(void) printMember 로 만들시에는

 클래스 인스턴스가 만들어졌을때만 사용이 가능한 메소드이며

 

+(void) printMember 로 만들시에는

 인스턴스가 없어도 메소드를 사용할 수 있다.

 

예) -(void) printMember 메소드 호출

 Golf *one = [[Golf alloc] init];

 [one printMember];

 

 첫째줄 :one이라는 포인터 변수를 만들고 동적할당으로 주소를 받는다.

 둘째줄 : one을 통해 메소드 printMember를 호출한다.

 

예) +(void) printMember 메소드 호출

 [Golf printMember];

 

 그냥 클래스명과 메소드 이름만 써서 바로 호출할 수 있다.

 (하지만 이것은 심각한 에러를 초래할 수 도있다. 왜냐하면 printMember 메소드는 인스턴스 내의 변수의 값을 출력하기로 되어 있기 때문에 존재하지도 않는 것을 출력하려고 하기 때문이다.)

 

 여기서 처음보는 것이 있는데

 [Golf alloc]

 일 것이다.

 

 Golf는 클래스 이름이고 alloc은 메소드 이름이다. alloc 메소드는 C에서의 malloc함수와 비슷한 역할을 한다. 근데 Golf내에는 alloc이라는 메소드가 없는데 메소드를 호출이 가능한 것은 NSObject 클래스에서 상속받았기 때문이다. Golf클래스는 NSObject에게서 상속받았기 때문에 alloc 메소드로 동적할당 받을 수 있으며, init 메소드로 초기화를 쉽게 할 수 있다.

 

 NSObject를 기억해두자.

 

 몇가지 예문을 통해 C와 다른점을 보자.

 

예문1. 분수 출력 프로그램

------------------------------------------------------------------

 

//분수를 다루는 프로그램 - 클래스 버전

#import <Foundation/Foundation.h>

//-- @interface부분---

@interface Fraction: NSObject

{

  int numerator;

  int denominator;

}

-(void) print;

-(void) setNumerator: (int) n;

-(void) setDenominator: (int) d;

@end

 

//---implementation 부분--

@implementation Fraction

-(void) print

{

 NSLog(@"%i/%i", numerator, denominator);

}

-(void) setNumerator: (int) n

{

  numerator = n;

}

-(void) setDenominator: (int) d

{

 denominator = d;

}

@end

 

//---program 부분--

int main(int argc, char *argv[])

{

  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

  Fraction *myFraction;

//Fraction 인스턴스 생성

  myFraction = [Fraction alloc];

  myFraction = [myFraction init];

//분수를 1/3로 설정한다

  [myFraction setNumerator: 1];

  [myFraction setDenominator: 3];

//print 메서드를 분수로 표시한다.

  NSLog(@"The value of myFraction is:");

  [myFraction print];

  [myFraction release];

 

  [pool drain];

  return 0;

}

 

-----------------------------------------------------------

 

결과는

 The value of myFraction is:

 1/3

 

 또 처음보는게 나왔다. setNumerator setDenominator 메소드가 인수를 받는다.

setNumerator 메소드는 C문법에서의

 

(void) setNumerator(int n);

{

  numerator = n;

와 동일하다.

 2개 이상의 인수를 받는법은 나도 지금은 모르니 알면 써놓겠다.

 

 

예문2. 연습

--------------------------------------------------

#import <Foundation/Foundation.h>

int main(int argc, char *argv[])

{

  NSAutoreleasePool * pool = [[NSAutorelease alloc] init];

 

 int main(int argc, char *argv[])

{

 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

 

 int integerVar = 100;

 float floatingVar = 331.79;

 double doubleVar = 8.44e+11;

 char charVar = 'W';

 

 NSLog (@"integerVar =  %i", integerVar);

 NSLog (@"floatingVar = %f", floatingVar);

 NSLog (@"doubleVar = %e", doubleVar);

 NSLog (@"doubleVar = %g", doubleVar);

 NSLog (@"charVar = %c", charVar);

 

 [pool drain];

 return 0;

 

}

 

----------------------------------------------------------------

 

실행결과

 

 integerVar = 100

 floatingVar = 331.79

 doubleVar = 8.440000e+11

 doubleVar = 8.44e+11

 charVar = 'W'

 

 말이 필요없다. Objective C에서도 C처럼 비슷한 변수 선언을 한다. 보고 깨닫도록 하자.

 

6. 클래스 & 메소드 관리 방법

 

 아는 사람들은 잘 알겠지만 왠만하면 선언문과 구현부분은 헤더와 c파일에 나누어 놓는게 좋다는 것을 알 것이다. Objective C에서도

 

***.h

에 다 선언해놓고,

 

구현부분은

***.m

부분에 해놓는게 좋다.

 

***.h 내용

 

#import <Foundation/Foundation.h>

@interface Gogo: NSObject

{

 int a;

}

-(void) print;

@end

 

***.m 내용

 

#import "***.h"

@implementation Gogo

-(void) print

{

 NSLog(@"Hi there");

}

@end

 

 

이런식으로 관리하길 바란다. (***는 임의의 파일명이다)

 

7. 프로퍼티(property)

 C++에서는

 

class KT

{

public:

 int a;

}

 

void main()

{

 KT *instance = new kT;

 KT->a = 3;

}

 

이런식으로 인스턴스의 변수의 값을 직접적으로 접근이 가능하다.(멤버가 public(공용)이라는 전제에서만..)

 하지만 Objective C에서는

 

@interface KT:NSObject

{

 int a;

}

@end

 

int main(int argc, const char *argv[])

{

 KT *instance = [[KT alloc] init];

 instance->a = 3;  //이런 문법은 불가.

}

 

 instance->a 같이 접근하는 문법은 존재하지가 않는다. 그렇기에 따로 멤버의 값을 조정하는 setMember 메소드 같은걸 만들어서 조절을 할 수밖에 없는데...

 

 프로퍼티(property)라는 문법을 사용하면 쉽게 멤버 값을 바꿀 수 있다. 우선은 클래스 선언부분에

 

@interface KT:NSObject

{

 int a;

}

@property int a; //이부분 추가

@end

 

 위와 같이 추가하고 구현 부분에

 

@implementation KT

 

@synthesize a; //이부분 추가

 

@end

 

 저 부분을 추가한다.

저렇게 해놓으면 메인에서

 

int main(int argc, const char *argv[])

{

 KT *instance = [[KT alloc] init];

 [instance a = 3];  // 이런 방법도 가능하고

 instance.a = 3; //이런 방법도 가능하다.

}

 

 저렇게 사용이 가능하게 된다.

 어휴.. 평소에 잘 쓰던 문법도 Objective에서는 저렇게 설정해줘야만 되나보다.

 

 오늘은 여기까지...

'프로그래밍 > Mac' 카테고리의 다른 글

Objective C를 배워보자(2)  (1) 2011.09.09
아이폰 SDK 개발자가 되자 (Part2)  (0) 2011.09.09
아이폰 SDK 개발자가 되자 (Part1)  (0) 2011.09.09
블로그 이미지

TailsPrower

,

일단 혹시 매킨토시에 대해 잘 모르는 사람을 위해서

http://x86osx.com/bbs/view.php?id=osxtips&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=2050

이러한 가이드를 써놓은 사이트도 있다. 꼭 읽어보자.

 

그리고 다 읽어보았다면 아래 사이트를 참조.

VMware로 스노우 레오파드 리테일을 까는법을 설명하고 있다.

http://x86osx.com/bbs/view.php?id=osxtips&page=1&sn1=&divpage=1&sn=on&ss=off&sc=off&keyword=조준기&select_arrange=headnum&desc=asc&no=1941

 

이 사이트에서 하라는 대로 하면 되고,

 

따로 필요한 것은 스노우 레오파드 10.6 리테일 인데,

 

내가 첨부한 토렌트 파일로 받으면 된다.

 

(토렌트는 p2p같은 것이다. 받으려면 일단 토렌트부터 설치해야 한다)

 

그리고 아이폰4 SDK를 받아서 설치하면 된다.

 

 

 

(정작 10.6.4 OS 설치하는데에 2주나 걸렸다.... 반갑다 설범 바탕화면!)

 

왠만하면 여기저기 맥에 대한 정보들을 일주일간 수집해보는 것을 추천한다.

(맥의 기반이 UNIX라던지, UNIX는 윈도우랑 다른점이라던지, 스노우 레오파드가 왜 일반 PC에서는 작동안되는지 등)

 

많이 알수록 차후에 여러가지를 하는데에 많이 도움이 될 것이라 생각한다.

 

나역시 이놈에 설범깔려고 2주동안 검색검색, 설치,지우기 설치 지우면서 여러가지를 배운 것 같다.

 

몇가지 모를 수 있는 용어정리를 하자면

 

VMware Workstation7 - 가상머신이라는 것으로 컴퓨터 내부에서 또다른 컴퓨터를 가상으로 만드는것.. 이것을 통해서 스노우 레오파드를 가상컴퓨터에 설치할 수 있다.

 

Snow Leopard 10.6.4 - iPhone안에 만드는 애플리케이션들은 맥OS프로그래밍의 기반인 Objective C 기반으로 되어 있다. 그렇기에 아이폰 프로그래밍 역시 맥에서 밖에 할 수 없는데, 맥에 깔려있는 OS가 바로 스노우 레오파드 (설범이라고도 함)이다. 그리고 이번에 나온 iPhone4의 SDK는 버전 10.6.4이상에서만 작동한다.

 

darwin - 모르겠다. VMware에서 Mac OS가 제대로 작동하도록 도와주는 프로그램인듯하다.

 

torrent - 위에서 말했지만, 당나귀,프루나 같은 p2p프로그램이다. 단지 해당 토렌트 파일을 가지고 있어야만 파일을 받을수가 있도록 되어 있다.

'프로그래밍 > Mac' 카테고리의 다른 글

Objective C를 배워보자(2)  (1) 2011.09.09
Objective C를 배워보자(1)  (0) 2011.09.09
아이폰 SDK 개발자가 되자 (Part1)  (0) 2011.09.09
블로그 이미지

TailsPrower

,

iPhone 프로그래밍을 하려면.......

 

iPhone 프로그래밍의 맞는 환경에서 작업해야 한다.

 

iPhone이 Apple에서 만든 물건이라 그런지 여기 안에 있는 운영체제 시스템인 iOs는 Mac OS랑 흡사하다.

 
Mac OS에서는 프로그래밍을 하려면 Object C라는 언어를 알아야 한다.

 
하지만 진짜 문제는 이 프로그래밍을 하려면 윈도우가 아니라 MacOS에서 작업해야 한다는 것.

 

그렇다면 다음과 같은 방법들을 생각해볼수있다.

 

1.매킨토시 컴퓨터 중고를 하나 산다. (요새 아이폰 때문에 중고 매킨토시가 많이 팔려 구하긴 쉽지않을듯)

2.멀티부팅으로 윈도우 옆에 MacOSX 깐다. (..이건 매우 방법이 어렵다고 알려져 있는..)

3.VMware(가상 머신)를 이용하여 Mac OS를 까는 것 (안정적인 방법)

 

현실적으로 내겐 1,2번은 힘들어 보인다.

 

그래서 선택한 것이 3번 VMware!!

 

VMware는 컴퓨터 안에 또다른 컴퓨터를 만들어 컴퓨터가 꼭 두대인것처럼 사용하는 프로그램이다.

(자세한 설명은 생략한다)

 

 하지만 본인의 CPU가 Virtual Technology(가상화 기술)이 적용되는지 확인할 필요가 있는데

 

SecurAble

이것을 다운받아서 실행시켜보면

 

위와같이 64비트를 지원하고 가상기술을 지원해야만 된다

 

 

위와 같이 뜰때는 안된다는 것이다.

32비트 하드웨어나 가상기술이 지원안될때도 된다고 알고있으나

그방법은 여기서 다루진 않겠다.

 

일단 64비트 지원에 가상기술이 된다면 아래의 VMware를 네이버에서 때려서 받으면 된다.

vmware workstation v7.0.1 build 227600

 

그리고 가상머신에서 돌릴 Mac OS가 필요한데 난

Snow Leopard 10.6 버전을 받아서 사용하였다.

 

다음장에서 좀더 자세히 다루겠다.

 

'프로그래밍 > Mac' 카테고리의 다른 글

Objective C를 배워보자(2)  (1) 2011.09.09
Objective C를 배워보자(1)  (0) 2011.09.09
아이폰 SDK 개발자가 되자 (Part2)  (0) 2011.09.09
블로그 이미지

TailsPrower

,