스위프트의 등장 배경과 언어적 특성
WWDC 2014에서 소개한 스위프트 관련 영상을 토대로 스위프트에 대해 알아보는 글입니다.
📙 0. WWDC 2014
스위프트를 처음 공개한 Apple의 WWDC 2014 영상을 살펴 보았다. 이해를 돕기 위해 중요 내용을 의역했다.
20년 동안 Objective-C는 많은 도움을 줬지만 이제는 좀 바뀌었으면 좋겠어. 바꾸지 않고 그냥 새로 프로그래밍 언어를 만들었어. 스위프트는 빠르고 현대적이고 안전한 대화형 언어야. 또 스위프트에 최신 기능도 빠짐없이 다 구현해냈어. 그리고 스위프트를 쓰면 코드가 엄청 짧아져. (환호)
📙 1. Objective-C without the C
“Now Objective-C has served us so well for 20 years. We absolutely love it. But we had to ask ourselves the question what would it be like if we had Objective-C without the baggage of C?”
이제 Objective-C는 20년 동안 우리에게 매우 좋은 서비스를 제공해 왔습니다. 저희는 Objective-C를 정말 좋아합니다. 하지만 우리는 ‘C라는 짐이 없는 Objective-C가 있다면 어떨까’ 하는 질문을 스스로에게 던져야 했습니다.
Objective-C는 애플의 iOS 및 macOS 앱 개발에 많이 사용되는 프로그래밍 언어였지만, C언어에 기반을 두고 있었기 때문에 제한적이고 의존성이 높았다. Objective-C를 사용함에 있어서 C 언어의 문법과 기능을 함께 사용해야했고 따라서 코드도 상대적으로 복잡했다. 따라서 애플은 C에 의존하지 않는 Objective-C에 대해 고민했고, 더 나아가서는 새로운 프로그래밍 언어로 생각을 확장하게 되었던 것 같다.
이러한 고민의 결과물인 Swift는 Objective-C의 기존 기능을 유지하면서도 C 언어와의 의존성을 크게 줄여주는 언어이다. Swift는 C와 Objective-C와의 상호 운용성을 제공하면서도, 보다 간결하고 직관적인 문법을 가지고 있어서 효율적이고 편리한 개발을 할 수 있도록 한다.
이러한 스위프트의 특징은 아래 그림에서 살펴볼 수 있다.
1) Cocoa and Cocoa Touch
스위프트는 macOS와 iOS에 사용되는 Cocoa와 Cocoa Touch 프레임워크를 모두 지원한다. 이외에도 다른 Apple의 운영체제인 watchOS와 tvOS에 사용되는 WatchKit 및 TVMLKit 프레임워크도 지원한다.
즉, 스위프트 언어 하나로 다양한 Apple의 운영 체제의 애플리케이션을 개발할 수 있다는 장점이 있다.
2) Build with LLVM compiler
스위프트는 LLVM (Low-Level Virtual Machine) 컴파일러를 사용하여 소스 코드를 기계어로 변환하여 실행 가능한 형태로 만든다. 또 LLVM의 강력한 최적화 기능을 활용하여 높은 성능과 효율성을 제공한다.
3) Optimizer and Autovectorizer
Optimizer는 LLVM 프레임워크의 일부로서, 코드를 분석하고 재구성하여 실행 시간 및 메모리 사용을 최적화하는 역할을 담당한다.
Autovectorizer 역시 LLVM의 일부로, 벡터화를 자동으로 적용하여 병렬 연산을 통해 실행 속도를 향상시키고 CPU의 SIMD(Single Instruction, Multiple Data) 기능을 최대한 활용한다. SIMD 기능은 단일 명령어로 여러 데이터를 동시에 처리하는 것이며, 스위프트의 Optimizer 최적화 기능을 활용할 수 있도록 도와준다.
4) ARC memory management
스위프트에서의 메모리 관리 모델은 ARC 모델이다. 자동으로 참조 숫자를 세는 것(Automatic Reference Counting)을 통해 메모리를 관리한다. ARC의 동작은 소스코드를 컴파일하는 단계에서 정적으로 결정되고, 이를 기반으로 메모리 관리 코드를 자동으로 생성한다.
ARC 모델은 개발자가 명시적으로 메모리 관리를 신경 쓸 필요 없게 해준다는 점에서 편의성을 제공하면서도 메모리 누수를 방지하는 중요한 메모리 관리 기능이다.
5) Same runtime as Objective-C
스위프트와 Objective-C가 동일한 런타임 환경을 공유하기 때문에, 상호 운용성을 제공할 수 있다.
Swift는 Objective-C 코드를 호출하거나 그 반대도 가능하기 때문에, 기존의 Objective-C로 작성된 코드를 Swift로 마이그레이션하거나 새로운 애플리케이션을 swift로만 개발할 수도 있다는 점에서 유연성을 제공한다.
📙 2. 스위프트의 언어적 특성
스위프트의 언어적 특성에 관련된 글을 보면 대부분 3요소(안전성, 신속성, 더 나은 표현성)를 얘기하는 것 같다. 어떤 글에서는 ‘애플이 공개한 내용이다’라고 하는데, 관련 출처를 찾지 못해서 아쉬웠다(혹시라도 아시는 분은 꼭 댓글이나 메일 부탁드립니다!).
애플은 WWDC 2014에서 Swift를 아래와 같이 소개했다.
“Swift is fast. It is modern. It is designed for safety. And it enables the level of interactivity and development that you’ve never seen on the platform.”
스위프트는 빠릅니다. 현대적입니다. 안전을 위해 설계되었습니다. 그리고 플랫폼에서 볼 수 없었던 수준의 상호작용과 개발을 가능하게 합니다.
1) 신속성 (Fast)
Swift는 성능 최적화를 위해 고려되었으며, C와 비슷한 수준의 성능을 제공한다. Swift의 LLVM 컴파일러는 코드를 최적화하여 실행 속도를 향상시키고 ARC 메모리 관리 모델을 통해 오버헤드를 최소화하여 더욱 효율적인 실행을 가능하게 한다.
2) 현대적 (Modern)
패러다임을 결합하여 개발자들이 보다 효율적이고 생산적인 코드를 작성할 수 있도록 한다. 또한 Swift는 간결한 문법, 고급적인 기능(Closures, Generics, Type inference, Multiple return types, Namespaces 등), 다양한 표현 방식을 지원하고 있다.
3) 안전성 (Safe)
Swift는 개발자가 안전한 코드를 작성할 수 있도록 다양한 보안 기능을 제공한다. 타입 안정성을 강화하여 컴파일 시점에 타입 오류를 검출하여 런타임 에러를 방지하고, 옵셔널(Optional) 타입을 도입하여 nil 값에 대한 안전한 처리를 지원한다.
4) 대화식 (Interactive)
Swift는 대화식 개발 환경(Swift Playgrounds)을 제공하여 코드 작성 및 디버깅을 쉽고 빠르게 할 수 있으며, 코드를 작성하면서 즉시 결과를 확인할 수 있거나 시각적인 피드백을 받을 수 있다. 또한, REPL(Read-Eval-Print Loop)이라는 기능을 통해 코드를 한 줄씩 실행하고 결과를 즉시 확인할 수 있다.
이외에도 스위프트에 대해 더 많은 정보를 얻고 싶다면, 애플의 공식 사이트를 참고하길 바란다.