최근 애플이 OS X 및 iOS용 애플리케이션 개발 과정에서 오브젝티브-C(Objective-C)를 대체할 새로운 언어 스위프트(Swift)를 공개했다. 그러나 아직 스위프트를 활용한 애플리케이션들의 iOS 및 맥 앱 스토어 승인은 이뤄지지 않고 있는 상황이다. 승인은 iOS 8과 신형 OS X 버전(요세미티)의 배포가 시작되는 가을부터 이뤄질 예정이다.
즉 아직 우리에겐 애플이 제시한 이 새로운 프로그래밍 언어의 이모저모를 찬찬히 살펴볼 시간이 남아있는 것이다. 여기 애플의 스위프트에 관해 알아야 할 10가지 사실들을 정리해 소개한다.
스위프트는 젊은 프로그래머들에게 어필할 것이다. 스위프트의 특성은 오브젝티브-C 보다는 루비(Ruby)나 파이썬(Python)과 닮은 부분이 많다. 대표적으로 최종 구문에 세미콜론을 삽입할 필요가 없다는 점 등이 스위프트와 파이썬의 공통점이라 할 수 있다(오프젝티브-C의 경우 세미콜론을 입력하지 않으면 오류 발생의 가능성이 있다). 루비나 파이썬에 지식이 있는 프로그래머들이라면, 스위프트에 역시 빠르게 적응할 수 있을 것이다.
스위프트와 오브젝트-C가 차이를 지니긴 하지만 두 언어는 양립할 가능성 역시 지닌다. 즉, 스위프트를 이용해 작성된 신형 모듈과 기존 오브젝티브-C 코드 베이스 간의 상호 운영이 보장되는 것이다. 스위프트가 탄탄한 오브젝티브-C 스킬을 이미 갖춘 이들에게도 어필할 수 있는 지점이다.
스위프트는 (보다) 안전한 언어가 될 것이다. 애플은 스위프트를 안전한 언어로 만드는데에도 많은 세세한 노력을 기울였다. 기본적으로 프로그래머들은 SSL “고투 페일” 에러(SSL “goto fail” error)와 같은 버그를 막기 위해 “If” 구문을 여닫을 때 중괄호, 대괄호를 포함해야 한다.
이에 더해 스위치 구문은 디폴트 구문의 포함을 반드시 요구하는데, 이는 구문 내 모든 가능성이 충족되지 않았을 때에도 구문 말미에 무언가가 실행되도록 보장하는 역할을 한다.
스위프트는 생각보다 빠르지 않다. ‘칼새’라는 이름의 의미와 달리 스위프트를 통해 작성된 애플리케이션이 오브젝티브-C 기반의 그것보다 압도적으로 빠르지는 않다. 두 언어는 분명 다르지만, 사실 그렇게 다르지는 않기도 하다.
두 언어의 타깃은 코코아(Cocoa)와 코코아 터치(Cocoa Touch) API(각각 OS X, iOS용)로 동일하며, 정적타입언어(statically typed language)라는 점이나 동일한 LLVM 컴파일러를 이용한다는 점 역시 공통적이다. 물론 서로 다른 언어임은 분명하기에 성능 역시 차이가 있을 수밖에 없지만, 확연한 차이는 기대하지 않는 것이 좋다.
스위프트는 불완전하다. 현재 우리가 이용 가능한 스위프트는 완성품이 아니다. 애플은 여전히 작업을 진행 중이고, 향후 몇 달 간 새로운 기능들을 더 제시할 것이다. 언어를 익히기 위해 스위프트를 이용해 코딩해보는 것은 좋지만, 이를 위해선 X코드 6 베타(Xcode 6 beta)와 iOS 8 SDK(역시 베타 버전이다)가 필요할 것이다.
요세미티와 iOS 8 배포 전까진 스위프트 기반 앱에 대한 애플의 승인 역시 이뤄지지 않을 것이라는 사실도 다시 한 번 기억하자.
스위프트 코드를 실험할 수 있는 ‘운동장’이 있다. 스위프트의 가장 흥미로운 기능 중 하나로 ‘플레이그라운드(Playground)’라는 이름의 쌍방형 환경을 들 수 있다.
이 도구를 이용하면 컴파일러를 이용해 코드를 구동하고 실행하는 지루한 과정을 거치지 않고도 당신이 입력한 코드에 따른 변화나 추가 사항을 확인할 수 있다.
플레이그라운드에는 특정 변수, 입력, 명칭 값을 코드 내 독립된 라인으로 ‘검토(watch)’하고 사이드 바를 통해 이것의 현재 값을 볼 수 있는 기능이나 이미지, 열 등의 그래픽 디스플레이 콘텐츠를 보여주는 ‘빠른 보기(Quick Look)’ 버튼들도 포함된다.
스위프트는 유형 추론을 제공한다. 스칼라(Scala)나 오파(Opa)와 같은 신흥 프로그래밍 언어들처럼 스위프트 역시 유형 추론(type inference)을 수행한다. 코더들은 유형 정보와 관련한 변수 주석을 다느라 시간을 보내거나 그 과정에서 실수를 할 위험에서 자유로워지는 것이다. 대부분의 경우 이 컴파일러는 변수의 설정한 값으로부터 유형을 추론할 수 있다.
그 결과는 코드 내 숨어있는 타입 관련 버그 감소, 스마트한 최적화를 통한 코드 구동 속도 개선 등의 효과로 이어진다.
스위프트는 제네릭스를 제시한다. 정적 타이핑에서는 기능 작성 시 그것의 매개 변수 유형을 명시하는 과정이 요구된다. 그런데 다른 상황에서 다른 유형으로 작업하기를 원하는 기능이 있다면, 문제는 복잡해진다.
이러한 문제를 해결하는 것이 제네릭스(Generics)다. 제네릭스는 각 유형에 따른 재작성의 필요 없이 서로 다른 유형들에 재활용될 수 있는 기능이라는 점에서 C++ 내 탬플릿과 많은 부분에서 유사성을 띈다. 일정 배열의 콘텐츠를 추가하는 기능 등을 사례로 생각해볼 수 있을 것이다. 콘텐츠는 정수일 수도 있지만 일부 경우에는 부동 소수점수일 수도 있다.
스위프트는 문자열을 보다 쉽게 다룬다. 오브젝티브-C의 문자열(string)을 다루는데 진저리치는 당신이라면 스위프트와 쉽게 사랑에 빠질 수 있을 것이다. 문자열을 다루는 방식이 큰 폭으로 간소화됐기 때문이다. 가장 주목할만한 변화는 “isEqualToString:”와 같은 번거로운 입력 대신 “+=”나 “==”를 통해 문자열을 연쇄, 비교할 수 있게 된 부분이다.
스위프트 튜플은 혼성 변수를 제공한다. 튜플(tuple)은 복수의 인자를 하나의 혼성 변수로 묶어내는 역할을 한다. 스위프트 튜플 내 값들은 어떤 유형이든 될 수 있으며 각 값이 동일한 유형일 필요는 없다. 튜플의 배열 역시 (Int, Int, Int), (int, String), (String,Bool) 등 필요한 어떤 방식으로건 가능하다.
튜플 내 값을 얻는 방법은 다양하다. 인덱스 넘버(0부터 시작하는)를 통해 접근할 수도 있고, 튜플을 분리된 상수와 변수로 분석할 수도 있다.
스위프트의 지배자는 애플이다. 오브젝티브-C는 30여 년 간 이용되어 온 탄탄한 프로그래머 기반을 지닌 언어다. 애플이 이를 포기하고 굳이 스위프트를 제시하는 이유는 뭘까? 이에 관한 공식적인 설명은 없었지만, 가장 가능성 높은 설은 이 새로운 언어의 창작자로서 원하는 어떤 기능이건 언제나 자유롭게 추가, 변경할 수 있길 원한다는 것이다.
또 스위프트가 주류로 자리잡게 되면 iOS 앱들을 안드로이드로 옮겨가는 과정이 더욱 어려워진다는 경쟁력도 있을 것이다. 오브젝티브-C를 자바로 복사해주던 기존의 도구들은 이제 더 이상 사용이 어려울 것이다. dl-ciokorea@foundryco.com