2012년 7월 27일 금요일

[Xcode 4.4 / LLVM 4.0] 스크립트 언어를 만들자는 거냐!

앞서 Objective-C 2.0의 property와 synthesize에 대한 이야기를 했었는데, 이번에는 Xcode 4.4에 포함된 LLVM 4.0이 지원하는 새로운 기능 중 일부를 정리해 볼까 한다.

LLVM 4.0이 차세대 Objective-C 스펙을 준수하는 것 같은데 정확한 ObjC버전은 얼마인지는 모르겠다. 그냥 그러려니 생각하자 -_-;;

기본적으로 synthesize가 필수가 아니게 되었다. synthesize를 명시하지 않은 property 들은 자동으로 synthesize가 되며 인스턴스 이름은 동일하게 지어지게 되었다.

가장 중요하게 꼽는 변화점은 바로 클래스를 언어에 포함시켜 버렸다는 점이다. NSNumber, NSArray, NSDictionary가 주요 대상이다. 아마도 예제코드를 적는 편이 더 이해가 잘 갈 것 같아서 예제코드 위주로 적어볼까 한다.

우선 기본적으로 이전부터 잘 쓰고 있던 NSString.
NSString *string = @"This is NSString!";
NSString *path = @(getenv("PATH"));
첫 번째 라인은 이전부터 쓰고 있던 방식이다. 이걸 언급하는건 비슷한 식의 문법이 추가되었기 때문이다. 물론 그 다음 라인은 신기할텐데 자동으로 UTF8String을 NSString으로 변환해 주는 기능이다.

이번에는 NSNumber.
NSNumber *seven = @7;
NSNumber *onePlusTwo = @(1 + 2);
이게 바로 클래스의 문법을 언어화 시켜버렸다는 가장 좋은 예 중 하나인 것 같다. 기존에는 numberWithInt 식의 메시지를 호출해서 클래스를 인스턴스화 시켜야 했지만 이제는 이렇게 짧게 표현이 가능하다. 더구나 괄호를 이용한 식도 바로 NSNumber의 인스턴스로 만들 수도 있다. 이건 굉장하다! 다만 아직 미구현 사항이 많은지 오브젝트와의 연산에는 제한이 있는 것 같다.

다음은 NSArray.
NSArray *list = @[ @"A", @"B", @"C" ];
//NSLog("List's second item = %@", list[1]);
리스트를 생성 할 때 마치 Python이나 Ruby 처럼 생성 할 수 있게 되었다. 아놔 젠장! 졸라 편해졌잖아!. 두 번째 라인의 NSArray의 참조도 C나 Python, Ruby와 비슷한 문법으로 추가될 예정이나 아직은 구현이 되지 않은 것 같다. 안타깝다.

물론 NSDictionary도 예외가 아니다.
NSDictionary *dict = @{ @"key1":@"value1", @"key2":@"value2" };
다만 NSDictionary도 array처럼 대괄호를 이용한 직접 참조도 아직은 미구현 이슈인 것 같다. ㅠㅠ

물론 이 외에도 많은 변화점이 있겠지만 위 내용들 만으로도 약간의 코드가 많이 줄어들 수 있다는 것을 알 수 있다. ARC와 Storyboard, 그리고 LLVM 4.0의 추가기능을 이용하면서 iOS/Cocoa 기반의 앱을 만드는 것이 점점 간단해 지고 있다. 그리고 점점 더 간단해 질 것이다. 기쁜 일이다. :-)

관련 링크: Developer Documents

댓글 없음 :