Objective-C Basic 1
1. X-Code & SDK 다운로드 및 설치 X-Code 다운로드 사이트 http://developer.apple.com/iphone/index.action 위의 사이트에서 다운로드 받은 프로그램을 더블 클릭해서 설치 설치 확인 Finder - 자신의 하드디스크 - Developer – Application – Xcode를 확인 설치된 버전 확인 [XCode] – [About Xcode] 로 확인합니다. 삭제(root 패스워드 필요) - 터미널에서 작업 sudo /Developer/Library/uninstall-devtools –mode=all 재설치 sudo rm -rf /Developer/* root 패스워드 변경(기존 계정의 패스워드가 있어야 합니다.) sudo passwd root root 접속 sudo su - root 2 2
3 3
예제 1.XCode를 실행 Developer 폴더 안에 있는 Applications 폴더에서 Xcode 아이콘을 찾아 더블 클릭 하면 Xcode가 실행됩니다. Xcode가 실행되면 네비게이션 윈도우가 표시됩니다. (설정에 따라 나오지 않을 수도 있습니다.) 4 4
2. [File] – [New] - [New Project]를 클릭하고 MAC OS X 아래의 [Application] - [Command Line Tool]을 선택하고 아래 옵션에서 Foundation을 선택하고 프로젝트 이름 입력(First) 한 후 저장 위치를 설정 5 5
6
3. main. m 파일에 소스 코드 확인 #import <Foundation/Foundation 3. main.m 파일에 소스 코드 확인 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool { NSLog(@"Hello, World!"); } return 0; } 7 7
4.툴바의 아이콘 중에서 Run을 눌러서 컴파일과 실행 Product 메뉴의 Run을 눌러도 됩니다. 8 8
X-Code 도움말 도움말은 다운로드 받아서 사용해야 합니다. [X-Code] - [Preference] – Documents 탭 에서 다운로드 받을 수 있습니다. 9 9
1. [help] – [Documentation and API Reference]을 이용 도움말 사용 1. [help] – [Documentation and API Reference]을 이용 2. 도움말을 보고자 하는 클래스나 메서드를 선택한 후 Command + 클릭 : 클래스가 정의된 파일로 이동 Option + 클릭 : 풍선 도움말 Control + Option + Command + ? : 문서로 바로 이동 10 10
파일 헤더 파일의 확장자는 h로 C언어와 동일합니다.(C++ → hpp) 클래스의 내용을 구현하는 파일의 확장자는 m입니다. (c, cpp, mm, py 등이 될 수 있습니다.) pch 파일은 PreCompiledHeader의 약자로 미리 컴파일 해두고 사용하겠다는 의미의 파일입니다. pch 파일에 포함되어 있는 import 구문은 프로젝트 내의 다른 파일 모두에 import되어 있는 것과 동일한 효과를 나타내게 됩니다. Cocoa 프로그래밍에서는 확장자가 l인 파일은 프로젝트의 정보를 가지고 있는 파일입니다. Cocoa Touch 프로그래밍에서는 plist 파일이 설정 내용을 저장하고 있습니다. 11 11
프로그램 기본 구조 헤더파일을 프로젝트에 추가할 때는 C언어의 #include 대신 #import 이용 의미는 같지만 import는 여러 번 사용해도 한 번만 import됩니다. SDK가 제공하는 헤더파일은 < >안에 기재하며 프로젝트 작업 시 생성한 파일들은 “ “안에 기재합니다. 프로그램의 entryPoint가 main으로 시작하는 것도 C언어와 동일합니다. main의 구조는 C언어와 동일합니다. NSLog는 메시지나 변수를 서식에 맞추어 콘솔 창에 출력해주는 메서드입니다. C언어의 printf와 유사합니다. 메시지를 출력할 때는 @”문자열”의 형태로 사용됩니다. 문자열 상수를 unicode로 나타내려면 Objective-C에서는 @를 붙여서 사용합니다. Objective-C 에서는 모든 문자열을 기본적으로 unicode로 사용합니다. 주석을 처리하는 방법은 C에서와 동일합니다. // 한 줄 주석, /* 여러 줄주석*/ 블럭에 이름 붙이기 #pragma mark 이름 12 12
2. 자료형 1.정수 int: 정수 상수의 기준형 앞에 long을 붙여서 long형을 만들 수 있습니다. 작은 정수를 저장하는 short도 있습니다. unsigned를 붙이면 양의 정수만 표현합니다. %d, %i, %u, %x 등을 이용해서 출력합니다. =>Objective-C: NSInteger, NSUInteger 2.실수 float은 작은 실수를 저장할 때 사용하며 4바이트를 차지합니다. double은 실수 상수의 기준 자료형이며 float 형 실수 상수는 숫자 뒤에 f를 붙여서 표기 double은 기본적으로 8바이트를 차지하며 출력할 때는 %f, %g, %e를 이용합니다. =>Objective-C: CGFloat 13 13
unichar는 유니코드 문자를 나타내며 2바이트 문자입니다. 출력을 할 때는 %C를 이용합니다. 4.논리형 3. 문자 char를 이용하며 1바이트 문자입니다. 출력을 할 때는 %c 또는 %d를 이용합니다. unichar는 유니코드 문자를 나타내며 2바이트 문자입니다. 출력을 할 때는 %C를 이용합니다. 4.논리형 BOOL로 표시하며 1바이트를 차지하고 값은 YES와 NO가 있으며 출력은 %d로 하게 되며 0이나 nil은 NO로 간주하며 0이 아닌 일반 변수나 nil이 아닌 id는 YES로 간주 5.포인터 타입 자료형과 *을 이용해서 포인터 타입의 변수를 생성할 수 있습니다. 6. id 객체를 가리킬 수 있는 데이터 타입 *이 없지만 id는 참조형입니다. 14 14
예제 15 15
1.Mac OS X의 Command Line Tool 프로젝트 생성(DataType) 2.main.m 파일의 코드 수정 int main (int argc, const char * argv[]) { @autoreleasepool //한 줄 주석입니다. unsigned int data = -1; //%d는 데이터를 부호가 있는 형태로 읽기 때문에 -1 //%u는 데이터를 부호가 없는 형태로 읽이 때문에 가장 큰 정수로 출력 NSLog(@"부호있는 정수:%d \n부호없는 정수:%u ", data, data); char str[] = "Hello World"; NSLog(@"str:%s", str); NSLog(@"str[0]:%c", str[0]); NSLog(@"str[1]부터 끝까지:%s", &str[1]); BOOL isOK=YES; //BOOL 타입의 메모리 사이즈는 1바이트 NSLog(@"BOOL Memory Size:%ld byte", sizeof(isOK)); NSLog(@"isOK:%d", isOK); //16진수 41 => 10진수 65 => 대문자 A unichar uchar = 0x0041; NSLog(@"unichar:%C", uchar); } return 0; 16 16
id 타입 Objective-C 언어는 runtime 시에 객체나 메서드를 결정하므로 기존의 데이터 타입을 미리 기재하는 static typing 이외의 방법이 필요합니다. Objective-C는 모든 객체를 전부 포인팅할 수 있는 타입(참조형)을 id라는 데이터 타입을 가지고 있습니다. C언어의 void * 개념과 id는 유사합니다. id타입을 사용하기 위해 Objective-C에서는 모든 객체에게 isa 라는 instance variable을 멤버로 소유하게 했습니다. isa는 객체가 사용할 클래스 객체의 id를 저장하고 있는데 이것을 이용해서 runtime 시에 데이터 타입을 알아낼 수 있게 됩니다. Objective-C에서 참조형을 선언할 때 사용한 데이터 타입은 실제적으로는 id 타입입니다. Objective-C에서는 참조형 변수의 경우 선언 시 사용한 데이터 타입과 대입될 때 사용되는 객체의 데이터 타입이 다르면 경고일 뿐 에러가 아닙니다. 일반 값 타입의 자료형 변수의 주소를 대입하면 경고 발생 17 17
예제 18 18
1.Mac OS X의 Command Line Tool 프로젝트 생성(IDTest) 2.main.m 파일의 코드 수정 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool int n = 10; //경고 발생 void *vp = &n; NSLog(@"vp가 가리키는 값: %d 주소:%d",*((int *)vp), vp ); //id는 변수가 참조형임을 알리는 데이터 타입 id obj = &n; NSLog(@"obj가 가리키는 주소:%d",obj ); //아래 줄은 XCode4에서는 에러이고 XCode3에서는 유효한 코드 //NSLog(@"obj가 가리키는 주소:%d\n 값:%d",obj, *obj); } return 0; 19 19
3.연산자 (): 연산의 우선 순위 변경 []:배열의 첨자 또는 메서드 호출 ->:구조체의 멤버 필드 참조 . :구조체의 멤버나 객체의 프로퍼티 호출 - : 2의 보수 +:양수 ++:1증가 –:1감소 !: NOT ~:1의 보수 *:포인터 변수의 데이터 참조 &: 일반 변수의 주소 sizeof: 메모리 크기 (자료형): 강제 형 변환 *:곱셈 /:나눗셈 %:나머지 +: 덧셈 -: 뺄셈 <<:왼쪽 시프트 >>:오른쪽 시프트 20 20
<: 작다 <=: 작거나 같다 >: 크다 >=: 크거나 같다 ==: 같다 !=: 다르다 &: 비트 AND ^: 비트 XOR |: 비트 OR &&: 논리 AND ||: 논리 OR ?: : 삼항 연산자 =: 할당 연산자 *=, /=, %=, += -=, &=, ^=, |= <<=, >>= ,: 컴마 연산자 21
예제 22 22
1.Mac OS X의 Command Line Tool 프로젝트 생성(OperatorTest) 2.main.m 파일의 코드 수정 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool int n = 10; NSLog(@"정수의 메모리 크기 : %ld 바이트",sizeof n); float f = 10.7; n = f; NSLog(@"n의 값: %d",n); n = (f+0.5); n = n << 2; n = 4 | 1; n = 1022 & 2; n = 1021 & 2; } return 0; 23 23
4.제어문 예제 24 24
1.Mac OS X의 Command Line Tool 프로젝트 생성(ControlState) 2.main.m 파일의 코드 수정 #import <Foundation/Foundation.h> int main (int argc, const char * argv[]) { @autoreleasepool int cnt = 0; for(int i=2; i<=100; i++) for(int j=2; j<=i; j++) if(i % j == 0 && i == j) NSLog(@"%d", i); cnt++; break; } else if(i%j==0) else continue; NSLog(@"============================="); NSLog (@"2부터 100까지 소수의 개수: %i개", cnt); return 0; 25 25