다음의 포스트를 참고하여 작성하였습니다.
Cocoa Dev Central: Learn Objective-C, (2022.01.22)


1. Basic

1-1. 기본 문법

[object method];
[object methodWithInput:input];

다른 언어에서 주로 사용하는 object.method를 Objc에서는 대괄호와 스페이스로 호출한다.

입력 파라미터가 있는 경우 :를 메소드와 파라미터 사이에 작성한다.

너무 어색하다


1-2. 리턴값이 있는 경우

output = [object methodWithOutput];
output = [object methodWithInputAndOutput:input];

1-3. 클래스 메소드 사용

id myObject = [NSString string];

근데 여기서 id를 처음 본다.

id는 Objective-C의 자료형으로

모든 종류의 객체를 참조할 수 있는 자료형이다. (id형은 *다형성과 *동적 바인딩을 위한 Objective-C의 기능) 잘 모르겠지만, 아무 객체나 참조 가능한 자료형으로 알고 넘어가보려 한다.

*다형성 : 하나의 객체가 여러 가지 타입을 가질 수 있는 것(회사원이면서, 남자이면서, 한국인 등) *동적 바인딩 : 런타임 시점에 객체 타입을 기준으로 실행될 함수를 호출하는 것


만약 명확하게 타입이 NSString일 경우, 다음과 같이 작성할 수 있다

NSString* myString = [NSString string];

오브젝트 타입 뒤에 *이 등장한다.

모든 Objective-C의 오브젝트 변수들은 포인터 타입이다. id타입은 이미 포인터 타입으로 정의되었기에 붙일 필요가 없다.


2. Nested Message(중첩 메세지)

내가 일반적으로 알아왔던 함수 호출의 개념을 Objective-C에서는 메세지 전송이라고 한다. (잘 모르겠어서 다음에 더 자세히 알아보려고한다.)


많은 프로그래밍 언어에서 Nested 메소드 혹은 함수를 호출할 때에는 다음과 같이 작성한다.

function1 ( function2() );

function2의 결과를 function1의 입력으로 던지는 것.

Objective-C에서는 다음과 같이 작성한다.

[NSString stringWithFormat:[prefs format]];

Nested Mesage는 가독성이 떨어지게 되므로 한 번에 두 개 넘게 사용하는 것을 피해야 한다.


3. Multi-Input Methods

몇몇 메소드들은 여러개의 입력값을 갖는데, Objective-C에서는 메소드 이름을 여러 세그먼트로 나누어 사용하여 헤더에서 다음과 같이 선언한다.

-(BOOL)**writeToFile**:(NSString *)path **atomically**:(BOOL)useAuxiliaryFile;

위의 메소드를 다음과 같이 작성하여 호출한다.

BOOL result = [myData **writeToFile**:@"/tmp/log.txt" **atomically**:NO];

내가 알던 거랑 많이 다르다

내가 알던 다중 파라미터 함수는 function(a, b)이다. Objective-C는 함수명과 파라미터가 구분이 안되는 것처럼 보인다.

이에 대해 알아보니 다음과 같은 내용을 알게되었다.

Objective-C의 경우 명명된 파라미터가 아니다,
Runtime시스템에서 메소드 명은 writeToFile:atomically:로 인식된다.