Swift - Xcode 6 Beta 3 변경점

시도때도 없이 죽어나가는 Xcode 6 베타 2의 플레이그라운드와 빌드 시 시도때도 없이 죽어나가는 Swift 컴파일러를 애처롭게 자주 보다보니 '다음 베타는 도데체 언제 나오냐' 라는 생각만 가득했다. 그런데 우연찮게 애플 개발자 홈페이지를 들어가보니 Beta 3 가 나와있었다. 으어 -_-
릴리즈노트를 보니 이번에는 Swift 언어 자체의 변경점도 제법 생겼다. 그래서 이 Swift의 변화에 관한 글을 한번 써 본다.

Sugar Syntax

설탕 문법? ... 뭐 이름 따윈 집어치우고, 단순히 말해서 컬렉션 타입(즉 Array나 Dictionary)에 새로운 문법이 추가되었다.
[Int]          ..... 기존 Int[] 혹은 Array<Int>
[String]       ..... 기존 String[] 혹은 Array<String>
[String:Int]   ..... 기존 Dictionary<String, Int>
그런데 기존 코드들이 몽땅 에러가 난다. 아무래도 문법의 모호성 때문에 바뀐 것 같다. 아래와 같은 예라면 어느 정도 수긍이 간다.
[String!]      ..... 기존 String[]!
좋다. 합격점! 대신 기존 코드를 수정해야 하는 억울함이 남는다. -_-

기타 개선

특정 레인지(Range)를 생성하던 오퍼레이터 '..'이 '..<'로 바뀌었다.
for i in 1..<5 {
    println(i)    // 1, 2, 3, 4가 찍힘
}
분명 나도 점 두개와 3개를 제대로 구분하지 못 했던 적이 있는 만큼 이 변화는 중요한 특성 같다. 가독성을 높이고 모호성을 낮추는 것은 매우 중요하다.

그 밖에 nil이 완벽하게 '없음'을 표현하는 단어가 되었다. 기존에는 _Nil을 가리키는 상수였다는 고백에 충격을 먹었다. 뭐 어쨌건 제대로 되고 있으니 다행이다.

표준 라이브러리 개선

표준 라이브러리 (Standard Library) 가 개선되었다는데 정확한 것들은 잘 모르겠다. 대충 몇 가지 예를 들자면:
  • Int 에 addWithOverflow 같은 메소드 추가
  • Int의 엔디안 생성자 추가: init(bigEndian:), init(littleEndian:)
  • sort의 버그 개선: 인자까지 정렬해 버리는 어이없는 버그. (참고링크)
등등이 있다.

개인적으론 크게 중요하다곤 생각지 않는다. 언젠가 찾아보면서 써 봐야지 기억하게 될 것들 같다. 버그 개선도 솔직히 기억할 필요는 없겠지?

스위프트와 친해지려는 노력의 업데이트들 -_-

1. 다운캐스팅 개선

이제는 AnyObject 이터레이션 시 바로 타입 지정이 가능하다.
let arr: [AnyObject] = [ "test", "test2" ]
for item in arr as [String] {
    println(item)
}
기존 방식 보다 훨신 더 단축되었다. 아하하 ;ㅁ;

2. 프레임워크들의 개선

전체인지 일부인지 모르겠지만 Cocoa나 UIKit 혹은 Core Foundation 등의 API들이 스위프트에 점점 친해지려고 모양을 바꾸고 있다.

예를 들자면 NSDicionary의 자동 매핑. 이제 [NSObject: AnyObject] 로 자동으로 매핑된다. 그래도 여전히 귀찮게 써야하겠지만...

일부 C API 에서 쓰던 욕 같은 이름들이 대거 사라지고 스위프트 방식으로 새롭게 매핑되고 있다. 예를 들자면 CInt나 CFloat 같이 C와 매핑시키기 위한 타입들이 스위프트의 Int나 Float 로 매핑되는 것 말이다.

아직은 이상한 포인터류 이름들이 많이 남아있어서 지저분한데(?) 점점 개선되지 않을까 생각된다. 왜냐하면 ObjCBool 같은 타입의 레퍼런스를 보면 'FIXIT: Bool로 바꿔도 되지 않아?' 라고 쓰여있기 때문이었다.

사족

스위프트에 관한 인상에 대해 글을 쓸 때 부터 이미 직감하고 있었지만, 스위프트의 문제는 언어 자체의 문제 보다 오히려 개발과 관련된 프레임워크들이 스위프트와 어울리지 않는게 더 크다는 생각이다. 그리고 나 뿐만 아니라 애플도 과제라고 인식하고 있는 것 같다.

덕분에 세 번재 베타에서는 제법 많은 부분은 스위프트에 맞게 바뀌었다. 물론 아직은 완벽하지 않다. 많다고 생각되지도 않다. 불친절한 문서도 더욱 업데이트가 필요하다.

그래도 점점 바뀌어가는 모습을 보니 스위프트로 옮겨가도 문제는 없을 것 같다는 생각이다.

[관련글] 스위프트(Swift) 언어에 대한 인상
[관련글] 스위프트(Swift) 가이드

댓글

이 블로그의 인기 게시물

소수점 제거 함수 삼총사 ceil(), floor(), round()

버전(Version)을 제대로 이해하기