목차

코코아

Objective C

Xcode

Objective C 시작

ObjC 에서는 함수 호출이라고 부르지 않고, 메시지 전송이라고 부름.

[오브젝트 메소드] // 한칸 띄어쓴 것은 문법

정식용어로는

[receiver selector]
// 이렇게
[PersonInstance doYourWorkMan]

메시지를 받을 객체와 호출할 메시지를 기록하는 형태의 문법을 가짐.

낮설지만, 꽤 타이핑하다보면 재밌음.

여기에 알려진 배경으로는, 위의 메시지 호출 방식을 사용함으로써

헤더

#import <cocoa/cocoa.h>
#import “person.h”

C 와 달리 중복포함 처리를 컴파일러가 해주므로 , 사소한 삽질은 안해도 됨

The id type

id anObject;

id 라는 키워드가 존재하고, 모든 오브젝트를 가리키는 대명사로 사용 가능

C 에서의 Void* 나 VB에서 Dim 같은 타입.

Static typing

NSString *theString;

과 같은 오브젝트를 선언했을 경우 import로 헤더파일을 포함하지 않았다면 NSString이 클래스라는 것을 코드상에서 알려줘야 함. NSString 클래스를 선언하는 부분에

@class NSString

한줄을 추가하면 이후에는 컴파일러가 알아서 찾아서 컴파일 함.

C++에서는 Forward Declare 라는 개념으로 익숙한 개념.

클래스 정의

선언부 – 헤더

@interface MyClassObject : NSObject
{
	float floatValue;
}
- (void)calculateWith:(float)otherValue;
+ (void)addAllValue;
@end

@interface 가 클래스의 시작 @end로 클래스 종결을 알리는 매우 직선적인 구조.

메소드의 선언에 대해서

가장 이상하게 보이는 부분인데, 룰은 매우 간단.

각 함수의 파라미터에도 부연 설명이 달려 있다.
// C나 자바
void calculateWith( float newValue, float anotherOne );
// 이걸 사용할 때
calculateWith( 0.2f, 0.5f );
// Objective-C
- (void) calculateWith:(float)newValue andWith:(float)anotherOne;
// 이걸 사용할 때
[someObject calculateWith:0.2f andWith:0.5f];

파라미터에 부연설명이 붙는 방식인데, 코드함수를 일반문장처럼 읽어 내려갈 수 있도록 하는 의도라고 함.

XCode에서는 이 부연설명에 신경쓰지 않고 코딩할 수 있는 보완장치가 있음.

인스턴스 생성

C의 계승자임에도 불구하고 자바나 C#처럼 오브젝트들은 메모리를 할당해서 사용해야함.

메모리 할당이 필요없는 것

기본 타입들은 할당이 없이 사용가능

int / char / float / void

오브젝트들

메모리 할당을 한 뒤에 사용이 가능함. 이것은 코코아 기반의 구동환경 ( 자바와 같은 가상머신의 환경 )이기에 메모리를 할당하고 그 뒤에 사용하는 것이 기본 룰이라고 함.

가비지콜렉션 기능은 원래 없었으나, 10.5 버전 ( 가장 최신, 레오파드 ) 부터는 가비지콜레션 기능이 추가되어 사용가능함.

가비지콜레션이 늦게 추가된 배경,

원래 코코아에는 가비지콜랙션이 아닌 메모리 관리 모듈이 따로 있어서 ( 할당된 메모리를 자동으로 해제해 주는 메모리 관리 오브젝트 ) 그동안 필요가 없었으니 기능 개선을 하면서 새로 추가되었다고 함.

현재 코코아에는 예전 버전의 메모리 관리 방식을 쓸 것이냐, 
가비지콜렉션 기능을 사용할 것이냐 하는 선택권이 있음.

클래스 Person 이라는 오브젝트가 있다고 하면

Person *newPerson = [[Person alloc] init];

이 구분이 기본

메모리 할당과 해제는 alloc / release 로 호출 하여 사용하나 alloc을 한 뒤에는 실제로 release를 하지 않아도 크게 상관없음.

메모리 관리 모듈에 등록해 놓으면 나중에 종료될 때 알아서 삭제됨.