Swift(프로그래밍 언어)


print("Hello world!")

1 개요


2014 WWDC에서 공개된 프로그래밍 언어.

기존 Objective-C의 단점을 보완하며, 같은 LLVM컴파일러로 빌드되며 같은 런타임을 사용하는 애플의 신규 언어체계이다. 기존 Objective-C에 비해 클로저, 다중 리턴 타입, 네임스페이스, 제네릭스, 타입 인터페이스 등 Objective-C에는 없었던 현대 프로그래밍 언어가 갖고 있는 기능을 많이 포함시켰으며, 이에 따라 일정한 성능향상을 보이고 있다.

어느정도 하위호환성도 보장하고 있어, 코드 내부에서 CObjective-C 코드를 섞던지, 스크립트 언어처럼 프로그래밍 할 수 있게 되어있기도 하다.

swift_benchmark.jpg

WWDC에서 연설로는 기존 Object-C 대비 1.5배, 파이썬 대비 200배라고 주장하지만, 당연히 파이썬은 인터프리터 언어이므로 목적 자체가 달라 1:1비교대상이 아닌데다가 일부러 다중 멀티쓰레드로 비교해서 싱글쓰레드 위주의 파이썬을 느리다고 까고 있으므로 저건 믿을 게 못 된다.

2015년 6월 8일, WWDC 2015에서 Swift의 차기 버전이 발표되었으며, 소스를 공개한다고 발표했다.
OS X, iOS, Linux 용으로 같은 해 가을에 배포될 예정이다. Swift 2 에서는 do/try/catch/throw 등 에러 확인 구문이 추가되었고, println() 함수가 print() 으로 대체되었다.

2015년 12월 4일 오픈소스로 공개 되었다.
2.2 및 3.0 개발버전이 배포중이며, OS X, iOS, watchOS, tvOS, Ubuntu LTS/일반 버전을 지원하고 있다. Apache 2.0 오픈 소스 라이선스로 개발자, 교육자, 학생 등 누구에게나 열려있다. 애플iOS, OS X, watchOS, tvOS, 그리고 Linux용 코드를 처리할 수 있는 OS XLinux용 바이너리를 제공하고 커뮤니티를 개설해 사용자들이 Swift 소스 코드 개발에 직접 참여할 수 있도록 했다.

IBM은 서버사이드에서 스위프트를 적극적으로 지원하고 있다. IBM은 Swift를 리눅스 서버에서 실행하여 브라우저에서 볼 수 있고 다른 사람과 공유할 수 있는 IBM Swift Sandbox 라는 것을 발표했으며, 자사의 클라우드 컴퓨팅 플랫폼인 Bluemix에서도 Swift를 지원할 것이라고 한다.

2 Objective-C와의 관계

많은 사람들이 Objective-C를 이제 묻혀질 언어로만 생각하고 있지만, 의외로 그렇지 않다.

Swift 프로젝트에서도 Objective-C는 아무런 제약 없이 사용 가능하다(!!). Swift의 컴파일러 백엔드와 Objective-C의 컴파일러 백엔드는 둘다 LLVM으로 동일하며, 어떤 언어를 사용해서 코드를 작성하더라도 같은 형태의 중간언어로 번역되어 컴파일 된다.

실전에서는 Swift에서 기존 Objective-C로 작성되어 있는 라이브러리를 사용하기 위해서라도 Objective-C는 반쯤 현역으로 사용된다. 프로젝트 내에서 대부분의 코드는 Swift로 작성되지만, Objective-C 기반으로 작성되어 있는 기존 코드가 상당수이기 때문에, Swift가 정착된 후에도 Objective-C의 사용은 계속될 것으로 보인다.

현재는 많은 라이브러리가 Swift로 재작성되거나 Swift만으로 작성 되고있으며 Objective-C로 작성된 라이브러리라고 해도 IDE가 Swift에서 바로 사용할 수 있도록 적절히 처리해주기 때문에 Objective-C를 전혀 몰라도 Swift로 작성하는데에 아무런 문제가 없다. Objective-C로 만들어진 라이브러리를 직접 수정할 일만 없다면 굳이 신규 프로젝트를 Objective-C로 진행하는 경우는 거의 없으므로 Swift를 주력 언어로 사용한다면 Objective-C는 코드 리딩정도만 할 줄 알면 충분하다. 어짜피 swift나 obj-c나 cocoa framework기반이라 코드리딩을 위해 별도로 공부할 필요도 없다

2.1 Objective-C 파일 사용 방법

Xcode의 Swift 프로젝트 내에서 Objective-C (.m) 파일을 만들게 되면 유저에게 물어본 후, Bridging-header.h 파일을 만들어주게 된다. 이 파일 안에, 자신이 만든 헤더파일들을 import 해주면 Swift 코드에서도 사용이 가능해진다.

3 swift 3.0

스위프트 3.0 릴리즈 노트를 보면 스위프트 개발팀의 계획을 대략 짐작할 수 있다. 먼저 바이너리 인터페이스(binary interface)의 안정화다.인용 오류: <ref> 태그가 잘못되었습니다;
이름은 숫자가 될 수 없습니다. 설명적인 이름을 사용하세요
이를 통해 스위프트가 바이너리 레벨에서 여러 운영체제에서 실행될 수 있도록 지원할 것으로 보인다. 스위프트의 활용 범위가 그만큼 넓어지는 셈이다.

제네릭도 개선된다. 라이브러리 전반에 걸쳐 제네릭을 사용해 스위프트 3.0에서는 제네릭 사용이 완성될 것으로 보인다. 타입 시스템 클린업과 문서화도 주목된다. 개발팀은 스위프트 3.0에서 "다양한 서브 타이핑, 타입 시스템의 전환 규칙, 컴파일러 타입 체커 내에서의 구현 등을 재검토하고 문서화 할 것"이라고 예고했다.

정제와 집중 측면도 있다. 이 부분에 대해서는 자세한 정보가 부족하지만, 개발팀은 관련 문서를 통해 "그동안 스위프트는 빠른 발전을 거듭해 왔고 이 과정에서 언어 전체와 잘 맞지 않는 기능이나 라이브러리 API가 추가됐다"며 "스위프트 3은 이런 부분을 제거하거나 개선해 스위프트의 전반적인 일관성을 개선할 것"이라고 설명했다. 또한, 스위프트 3.0에서는 API 개발자를 위한 새로운 디자인 지침이 나올 것으로 보인다.