[Objective-C] NSString 사용을 통한 클래스구조 관찰

[원본 링크]

image 문자열 변수를 선언하고 출력하는 간단한 코드다.
NSString은 문자열을 표현하는 클래스 타입이고, 클래스 타입의 변수 선언은 포인터로 지정해줘야 한다.

Objective-C의 포인터는 스위프트나 c++의 shared_ptr처럼 레퍼런스카운팅 방식으로 동작하기 때문에 메모리 누수는 크게 걱정하지 않아도 된다.

이전 포스팅에서 언급했듯이, @"..."는 NSString의 리터럴 타입이다.




image

image Objective-C는 C답지 않게 꽤 동적인 놈이다.

타입이 들어갈 자리에 id를 두면 타입을 생략할 수 있다. ObjC의 클래스뿐만 아니라 C의 기존 타입들에도 다 적용이 가능하다.

id는 타 언어의 any나 object 타입과 유사한데. 그러면서도 자동 변환까지 다 해준다는 점이 또 다르다.
위 코드에서도 NSString이 id 타입으로 저장됐다가 NSLog에 들어갈때 정상적으로 출력되는걸 볼 수 있다.


ObjC는 메서드 호출법이 꽤나 기괴하다.
다른 언어에서 보통 .이나 ->를 쓰는게 아니라... 대괄호 안에다가 이상하게 뭉쳐둔다.
형식은 이렇다.
[객체명 메서드명: 인자...]
인자가 두개 이상일 경우엔 쉼표가 아니라 콜론으로 구분한다.
[객체명 메서드명:인자1 :인자2...]
인자는 당연히 없으면 생략해도 된다.
아래는 문자열 s에서 length 메서드를 호출해 문자열의 길이를 획득, 출력하는 코드다. image

image


아래 코드는 문자열 2개를 결합하고 출력하는 코드다.
ObjC엔 연산자 오버로딩이 없다. 좀 더럽다. image

image

정적메서드도 있다. 호출방법은 객체가 들어갈 자리에 클래스만 넣으면 된다.
아래 코드는 문자열을 복사해서 반환해주는 정적메서드 stringWithString의 사용례다. image