본문 바로가기
  • 그냥 하자
iOS

Chap1. objective-c의 기초, 맥OS와 iOS, 기본자료형, id타입, 포인터 타입, 제어문

by Mash 2012. 3. 16.
반응형
이 글은 아래의 출처를 수정하여 작성한 글 임을 밝힌다. 
<출처 : http://wwwww.kr/30792>


1.  MAC OS 의 변천사.


<출처 : http://en.wikipedia.org/wiki/History_of_Mac_OS>



단축키

Ctrl => command

Alt => option



Mac을 처음 사용 하는 입장에서 제일 헷갈리는 단축키다. 

shift + command + <-  : home key

                           ->  : end key



objective-c 를 하려면 아래 세가지가 필요

=========================

c level - 순수 c언어 

core level - 앞에 cf가 붙음

object-c - NS가 붙음



언어 : objective-c

프레임워크 : iPhone SDK (cocoa touch)

    Mac OS X (cocoa)



cocoa touch(i-os) - ipod, iphone, ipad

cocoa - mac os x




project folder

=============

source - .h, .m… 클래스에 관한 파일 들어감

메모리에 모두 자동으로 로드가 됨

other - main, pch

실행하는데 반드시 필요하지만 소스는 아니다.

resources - 외부자원

필요할때 읽어 옴

framework - 라이브러리

오브젝티브c 에선 안씀. 나중에 아이폰에서 사용

products - 번들(App)

실행 파일



objective-c 기본 구성파일

================================

project name.m : 메인을 소유 (c언어의 .c or .cpp 파일에 해당)

.pch : PreCompiled Header 미리 번역해놓는 파일. 속도향상을 위하여.

  import하면 모든 파일(h와m파일)에 적용된다.

  => 부피는 커지지만 속도는 빨라짐

.l : 프로젝트 정보에 대한 파일. 아이폰에선 info.plist 로 변경됨

.Os Darwin \" os x  외부에서 부르는 이름


추가구성

.h : header file



런을 할때는 콘솔을 띄우고 확인

런 - 콘솔 (쉬프트 커맨드 알)



가끔 iOS나 Android 프로그래밍 할 때도 마찬가지지만
알 수 없는 오류가 발생할 때가 있는데 이럴때는 엑스코드에서

방법1. 빌드 - 클리어 올 타겟

방법2. 시뮬레이터에서 초기화



정수

unsigned int : 양의 정수를 저장

unsigned int a = -1 //가능. 컴퓨터에선 1의 2의 보수. -1은 정수에서 Maximum 이다. 무한대의 의미.

=>  NSInteger, NSUInteger


문자

char - 1byte

unichar - unicode, 2byte. %c use.


논리형

BOOL로 표시. 값은 yes or no

&d 사용


c에서 printf와 sprintf의 다른점?
간단하게 설명하면
printf는 일반적인 outputStream을 보여준다.
fprintf는 파일을 핸들링한다.
sprintf는 할당된 버퍼로 이동한다.
사용법은 아래와 같다.
#include <stdio.h>
 
int fprintf(FILE *stream, const char *format, …);
 
int printf(const char *format, …);
 
int sprintf(char *buffer, const char *format, …);


 

=================================================================================================

파일

=================================================================================================

Ø헤더 파일의 확장자는 h로 C언어와 동일합니다.

Ø소스 파일의 확장자는 m입니다.

Øpch 파일은 PreCompiledHeader의 약자로 미리 컴파일 해두고 사용하겠다는 의미의 파일입니다.
Øpch 파일에 포함되어 있는 import 구문은 다른 파일 모두에 import되어 있는 것과 동일한 효과를 나타내게 됩니다.
Ø확장자가 l인 파일은 프로젝트의 정보를 가지고 있는 파일입니다.

 

=================================================================================================

프로그램 기본구조

=================================================================================================

Ø헤더파일 추가는 C언어의 #include  대신 #import 이용
Øinclude는 해당하는 파일을 먼저 컴파일해서 소스에 컴파일하라는 의미인데  import도 의미는 같지만 import는 여러 번 사용해도 한 번만import됩니다.
ØSDK나 Objective-C 가 제공하는 헤더파일은 < >안에 기재하며 프로젝트 작업 시 생성한 파일들은 “ “안에 기재합니다.
Ømain의 구조는 C언어와 동일합니다.
Ø프로그램의 entryPoint가 main으로 시작하는 것도 C언어와 동일합니다.
ØNSLog는 메시지나 변수를 서식에 맞추어 콘솔 창에 출력해주는 메서드입니다.

C언어의 printf와 유사합니다.

일반 메시지를 출력할 때는 @”문자열”의 형태를 취하면 됩니다.

Objective-C 에서는 모든 문자열을 unicode로 사용하기 때문입니다,

문자열 상수를 unicode로 나타내려면 Objective-C에서는 @를 붙여서 사용합니다.

Ø주석을 처리하는 방법도 C에서와 동일합니다.

// 한 줄 주석

/* 여러 줄주석*/

 

=================================================================================================

기본자료형

=================================================================================================

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

 

3. 문자
char를 이용하며 1바이트 문자입니다.
출력을 할 때는 %c 또는 %d를 이용합니다.
unichar는 유니코드 문자를 나타내며 2바이트 문자입니다.
출력을 할 때는 %C를 이용합니다.

 

4.논리형
BOOL로 표시하며 1바이트를 차지하고 값은 YES와 NO가 있으며 출력은 %d를 이용하여 0과 1로 출력합니다.
0이나 nil은 NO로 간주하며 0이 아닌 숫자나 nil이 아닌 id는 YES로 간주합니다.

 

5. id
객체를 가리킬 수 있는 데이터 타입
*이 없지만 id는 포인터 타입(참조형)으로 간주합니다.

 

6. 포인터 타입
자료형과 *을 이용해서 포인터 타입(참조형)의 변수를 생성할 수 있습니다.

01.#import <Foundation/Foundation.h>
02.int main(int argc, char *argv[])
03.{
04.//한 줄 주석입니다. 
05.unsigned int data   = -1;
06.NSLog(@"%d %u ", data,data);
07.char str[] = "Hello World";
08.NSLog(@"%s", str);
09.NSLog(@"%c", str[0]);
10.NSLog(@"%s", &str[1]);
11.BOOL isOK=YES;
12.NSLog(@"BOOL Memory Size:%d byte"sizeof(isOK));
13.NSLog(@"%d", isOK);
14.return 0;
15.}

=================================================================================================

id 타입

=================================================================================================

- Objective-C 언어는 runtime 시에 객체나 메서드가 변할 수 있으므로 기존의 static typing 이외의 방법이 필요합니다.
- Objective-C 에는 모든 객체를 전부 포인팅할 수 있는 타입을 새로 정의해 놓았는데 id 입니다. 
- C언어의 주소의 개념과 id는 유사합니다.
- id타입을 사용하기 위해 Objective-C에서는 모든 객체에게 isa 라는 instance variable을 멤버로 소유하게 했습니다.
- 실제 그 객체가 사용할 클래스 객체의 id를 저장하고 있는데 이것을 이용해서 runtime 시에 데이터 타입을 알아낼 수 있게 됩니다.
- C언어의 void *과 유사하지만 void *과는 조금 다릅니다.
- void * 은 실제 사용을 하고자 하는 경우 형 변환을 해서 사용해야 하지만 id는 형 변환 없이도 자유 자재로 사용할 수 있습니다.
- id에 클래스를 자료형으로 갖는 데이터가 아닌 데이터의 주소를 대입할 수 있지만 Warning이 발생합니다.

01.#import <Foundation/Foundation.h>
02.int main(int argc, char *argv[])
03.{
04.int n = 10;
05.NSLog(@"정수의 메모리 크기 : %d 바이트",sizeof n);
06.float f = 10.7;
07.n = f;
08.NSLog(@"n의 값: %d",n);
09.n = (f+0.5);
10.NSLog(@"n의 값: %d",n);
11.n = n << 2;
12.NSLog(@"n의 값: %d",n);
13.return 0;
14.}

=================================================================================================

제어문

=================================================================================================

반복문은 for, while, do ~ while이 있으며 이를 제어하기 위한 continue, break 
조건문은 if, switch가 있습니다.

01.#import <Foundation/Foundation.h> 
02.int main (int argc, const char * argv[])
03.{
04.NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
05.int cnt = 0;
06.for(int i=2; i<=100; i++){
07.for(int j=2; j<=i; j++){
08.if(i % j == 0 && i == j){
09.NSLog(@"%d", i);
10.cnt++;
11.break;
12.}
13.else if(i%j==0){
14.break;
15.}
16.else{
17.continue;
18.}
19.}
20.}
21.NSLog(@"=============================");
22.NSLog (@"2부터 100까지 소수의 개수: %i개", cnt); 
23.[pool drain]; 
24.return 0; 
25.}







#import <Foundation/Foundation.h>


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

    NSAutoreleasePool * pool = [[NSAutoreleasePool allocinit];

    //메모리해제를 대신해주는 pool

    // insert code here...

    

NSLog(@"Hello, World!");

// NSLog = printf 같은 기능, @:유니코드로 출력하라!

    [pool drain]; // drain : release

    return 0;

}

 
반응형