최근 수정 시각 : 2024-11-30 01:14:37

Swift


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
스위프트(swift)라는 이름을 가지는 다른 문서에 대한 내용은 스위프트 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px 0"
<rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++
}}}
}}}
}}}
[ Stack Overflow 2024 ]
[ TIOBE 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 C++ 12 Delphi / Object Pascal
3 C 13 PHP
4 Java 14 Rust
5 C# 15 Ruby
6 JavaScript 16 Swift
7 SQL 17 Assembly language
8 Visual Basic 18 Kotlin
9 Go 19 R
10 Fortran 20 Scratch
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
21 COBOL 36 Scala
22 Classic Visual Basic 37 Transact-SQL
23 LISP 38 PL/SQL
24 Prolog 39 ABAP
25 Perl 40 Solidity
26 (Visual) FoxPro 41 GAMS
27 SAS 42 PowerShell
28 Haskell 43 TypeScript
29 Dart 44 Logo
30 Ada 45 Wolfram
31 D 46 Awk
32 Julia 47 RPG
33 Objective-C 48 ML
34 VBScript 49 Bash
35 Lua 50 Elixir
}}}}}}}}} ||
[ PYPL 2024 ]

}}} ||
프로그래밍 언어 목록 · 분류 · 문법

파일:Swift 심볼.svg
{{{#!folding [ 펼치기 · 접기 ] A powerful open language that lets everyone build amazing apps.
누구나 놀라운 앱을 만들 수 있게 해주는 강력한 개방형 언어. #
현재 최신 버전
Swift 6.0.2 (2024년 10월 29일 릴리즈)
{{{#!folding 역대 버전 [ 펼치기 · 접기 ] 역대 버전
Swift 1 2014년
1.0 8월 18일
1.1 10월 16일
2015년
1.2 4월 8일
Swift 2 2.0 9월 16일
2.1 10월 20일
2016년
2.2 3월 21일
2.2.1 5월 3일
Swift 3 3.0 9월 13일
3.0.1 10월 28일
3.0.2 12월 13일
2017년
3.1 3월 27일
3.1.1 4월 21일
Swift 4 4.0 9월 19일
4.0.2 11월 1일
4.0.3 12월 5일
2018년
4.1 3월 29일
4.1.1 5월 4일
4.1.2 5월 31일
4.1.3 7월 27일
4.2 9월 17일
2019년
4.2.4 3월 29일
Swift 5 5.0 3월 25일
5.0.1 4월 18일
5.0.2 7월 15일
5.0.3 8월 30일
5.1 9월 19일
5.1.1 10월 11일
5.1.2 11월 7일
5.1.3 12월 13일
2020년
5.2 3월 24일
5.2.1 3월 30일
5.2.2 4월 15일
5.2.3 4월 29일
5.2.4 5월 20일
5.2.5 8월 5일
5.3 9월 16일
5.3.1 11월 12일
5.3.2 12월 14일
2021년
5.3.3 1월 28일
5.4 4월 26일
5.4.1 5월 25일
5.4.2 6월 28일
5.4.3 9월 9일
5.5 9월 20일
5.5.1 10월 25일
5.5.2 12월 13일
2022년
5.5.3 2월 9일
5.6 3월 15일
5.6.1 4월 9일
5.6.2 6월 21일
5.6.3 9월 3일
5.7 9월 13일
5.7.1 11월 4일
5.7.2 12월 15일
2023년
5.7.3 1월 20일
5.8 3월 31일
5.8.1 6월 2일
5.9 9월 19일
5.9.1 10월 20일
5.9.2 12월 12일
2024년
5.10 3월 6일
5.10.1 6월 7일
Swift 6 6.0 9월 17일
6.0.1 9월 28일
6.0.2 10월 29일
개발중
}}} ||
커뮤니티 소스 코드 로고
Swift.org GitHub Download
애플 개발자 사이트 Swift Playgrounds
원문 한국 iPad 앱
기타
Swift를 실행해볼 수 있는 웹사이트
}}} ||

파일:Swift 로고.svg 파일:Swift_logo_horz_lockup_color_reverse_rgb.svg
Objective-C
without the C.

크레이그 페더리기, WWDC 2014 키노트[1]
C가 없는 Objective-C.

1. 개요2. 개발 철학3. Objective-C와의 관계
3.1. Objective-C 파일 사용 방법
4. 버전
4.1. Swift Playgrounds4.2. Swift 34.3. Swift 4
4.3.1. 새로운 기능
4.4. Swift 54.5. Swift 6
5. The Swift Programming Language6. 문제점7. 개발 환경8. 미래9. 학습10. 관련 문서

[clearfix]

1. 개요


#!syntax swift
print("Hello, world!")
// Swift 5로 작성한 "Hello world!"

Apple이 개발한 프로그래밍 언어. '스위프트'라고 읽는다. 2014년 WWDC14에서 공개되었다.

이름의 유래는 신속한, 재빠른이라는 뜻의 영단어인 #s-1이다. 로고는 Swift라고 불리는 칼새[2]를 상징하는 것으로 추정된다.

기존 Objective-C의 단점을 보완하고, LLVM/ Clang[3] 컴파일러 빌드되는 애플의 신규 프로그래밍 언어이다. 클로저, 다중 리턴 타입(튜플), 네임스페이스, 제네릭, 타입 인퍼런스 등 Objective-C에는 없었던 현대 프로그래밍 언어가 갖고 있는 기능을 많이 포함시켰으며, 이에 따라 일정한 성능 향상을 보이고 있다. Apple이 만든 언어답게 iOS iPadOS, macOS를 대상으로 한다.

2015년 스택 오버플로우 설문 조사에서 가장 좋아하는 언어 1위를 달성하였다.

2. 개발 철학

Swift는 다음과 같이 코드의 표현력을 높이기 위한 다른 많은 기능을 제공합니다.
  • 함수 포인터와 통합된 클로저
  • 튜플 및 멀티플 반환값
  • 제네릭
  • 범위 또는 컬렉션에서의 빠르고 간결한 반복
  • 메소드, 확장 프로그램 및 프로토콜을 지원하는 구조
  • 함수형 프로그래밍 패턴(예: map 및 filter)
  • try/catch/throw를 사용한 기본 오류 처리

Swift가 현대적인 프로그래밍 언어인 이유.

WWDC에서 공개된 Swift의 특징은 Fast, Modern, Safe, Interactive였으나, 이후 Safe(안정성), Fast(신속성), Expressive(표현성)로 바뀌었다.

하위 호환성도 어느 정도 보장하고 있어, 코드 내부에서 C Objective-C 코드를 섞거나 스크립트 언어처럼 프로그래밍할 수 있게 되어 있다.
[clearfix]
RC4 encryption
파일:external/regmedia.co.uk/swift_benchmark.jpg

{{{#!folding [ 내용 보기 · 접기 ]
<table width=100%><table bgcolor=white><table bordercolor=white,#1f2023> Swift
220x
Objective-C
127x    
Python
1x
}}} ||

오른쪽 사진과 같이 WWDC Keynote에서는 RC4[4] 암호화 속도가 기존 Objective-C 대비 약 1.73배, Python 대비 220배라고 설명하고 있다. 하지만 Python은 일부러 다중 멀티스레드로 비교해서 싱글스레드 위주의 Python을 느리다고 까고 있으므로 저건 믿을 게 못 된다. 그냥 Swift가 멀티스레드 환경에 잘 최적화되어 있다는 뜻으로 이해하자.

Swift의 개발자인 크리스 래트너[5] 본인이 직접 언급한 영향을 준 언어로는 Rust, Haskell, C#, Python, Ruby 정도가 있다. 그 외 Kotlin 같은 언어의 영향도 물론 있겠지만, 여러 가지를 봤을 때 가장 강력한 흔적을 남긴 건 역시 Rust다. Rust에 C#을 가미해서 Apple 입맛으로 조리한 느낌. 사실 Kotlin도 위 언어들에서 영향을 받아 비슷한 방향으로 수렴 진화 했다고 보는 게 맞다. Kotlin과의 차이점이라면 Objective-C 기반 파생과 Java 기반 파생이라는 것 정도.

그 밖에도 Apple에서 Swift 보급을 위해 노력하는 모습이 보인다.
All of Cocoa and Cocoa Touch
Complete Xcode support
Swift language guide
Complete reference docs
Submit apps to App Store
[clearfix]
Apple WWDC 2015 Keynote
Swift 2

【 펼치기 ・ 접기 】


2015년 6월 8일, WWDC15에서 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/일반 버전[6]을 지원하고 있다. 아파치 라이선스 2.0으로 개발자, 교육자, 학생 등 모두에게 열려있다. Apple은 iOS, OS X, watchOS, tvOS, 그리고 Linux용 코드를 처리할 수 있는 OS X 및 Linux용 바이너리를 제공하고 커뮤니티를 개설해 사용자들이 Swift 소스 코드 개발에 직접 참여할 수 있도록 했다.

IBM은 서버사이드에서 Swift를 적극적으로 지원하고 있다. IBM은 Swift를 리눅스 서버에서 실행하여 브라우저에서 볼 수 있고 다른 사람과 공유할 수 있는 IBM Swift Sandbox라는 것을 발표했으며[7], 자사의 클라우드 컴퓨팅 플랫폼인 Bluemix에서도 Swift를 지원하고 있다. 또한, Microsoft Windows용 컴파일러도 5.3 버전과 함께 공개했다. # 현재 Swift는 macOS 환경에서 iOS용 앱을 개발하는 데 주로 쓰인다.

다음은 Apple 개발자 홈페이지에 나와있는 기타 사항이다. 원문 한국
* Playgrounds and REPL in Xcode
Xcode의 Playground 및 REPL
  • Read-Eval-Print-Loop (REPL)
    REPL
  • Package Manager
    패키지 매니저
  • Fast and Powerful
    빠르고 강력한 성능
  • Designed for Safety
    안전 중심 설계
  • Objective-C Interoperability
    Objective-C 상호 운용성

3. Objective-C와의 관계

Swift의 등장으로 많은 사람들이 기존의 Objective-C가 조만간 역사 속으로 묻힐 것으로 전망하였지만, 실제로는 그렇지 않다.

Swift의 하위 호환으로서 Objective-C는 계속 지원되며, Swift 언어로 구성된 프로젝트 내부에서 Objective-C 소스 코드 파일을 아래 소항목의 추가 방법과 같이 추가하면, 아무런 제약 없이 서로의 객체 이름을 부르며 자유롭게 사용 가능하다(!!). Swift의 컴파일러 백엔드와 Objective-C의 컴파일러 백엔드는 둘 다 LLVM으로 동일하며, 어떤 언어를 사용해서 코드를 작성하더라도 같은 형태의 중간 언어로 번역되어 컴파일 된다.

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

물론 기존의 것이라서 지원할 뿐이고, 현재 Apple에서는 Swift를 밀고 있기 때문에 Apple 계열의 많은 라이브러리가 Swift로 재번역되거나 새로운 라이브러리는 아예 Swift로만 작성되고 있으며, Objective-C로 작성된 라이브러리라고 해도 Xcode 등의 IDE가 Swift에서 바로 사용할 수 있도록 적절히 처리해 주기 때문에, Objective-C로 만들어진 라이브러리를 직접 수정할 일만 없다면 Objective-C를 전혀 몰라도 Swift로 작성하는 데에 아무런 문제가 없다. 굳이 신규 프로젝트를 Objective-C로 진행하는 경우는 거의 없으므로 Swift를 주력 언어로 사용한다면 Objective-C는 코드 리딩 정도만 할 줄 알면 충분하다. (어차피 Swift나 Obj-C나 Cocoa Framework 기반이라 코드 리딩을 위해 별도로 공부할 필요도 없다.)

3.1. Objective-C 파일 사용 방법

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

4. 버전

4.1. Swift Playgrounds

Swift Playgrounds
Learn serious code on your iPad. In a seriously fun way.
iPad로 진정한 코딩을 배우는 진정 즐거운 방법.
[8]
[clearfix]
Swift Playgrounds
A new way to learn to code with Swift on iPad.
iPad에서 Swift를 사용하여 코딩을 배우는 새로운 방법.
[9]
[clearfix]
Apple WWDC 2016 Keynote
Swift Playgrounds

【 펼치기 ・ 접기 】

[clearfix]
Swift 언어를 사용하는, iPad를 위한 개발 도구이다. WWDC16에서 최초로 공개되었으며, 가격은 무료이다. 학생들은 물론 어느 누구나 쉽게 프로그래밍을 배울 수 있게 하고자 개발된 앱이다. 아쉽게도 iPhone용 앱은 없으며, 지속적으로 업데이트 및 기능이 추가되는 중이다. 2.2 버전에서는 한글화도 꽤 진행되었다. iPadOS 15에서는 iPad의 Switft Playgrounds앱 하나만으로 Mac의 도움 없이 iOS/iPadOS용 앱을 개발해서 테스트하고 앱스토어에 등록하는 것까지 가능해진다고 한다. #

Apple에서 지대한 관심을 가지고 있는지 매년 Swift Playgrounds에 대해 안내하고 있다.

[ 관련 영상 보기 · 접기 ]
[clearfix]
Apple WWDC 2017-Session 408
What's New in Swift Playgrounds

【 펼치기 ・ 접기 】

[clearfix]
Apple WWDC 2017-Session 416
Teaching with Swift Playgrounds

【 펼치기 ・ 접기 】

[clearfix]
Apple WWDC 2017-Session 605
SceneKit in Swift Playgrounds

【 펼치기 ・ 접기 】


[clearfix]

4.2. Swift 3

Apple WWDC 2016-Session 402
What's New in Swift

【 펼치기 ・ 접기 】

Swift 3.0 릴리즈 노트를 보면 Swift 개발 팀의 계획을 대략 짐작할 수 있다. 먼저 바이너리 인터페이스(binary interface)의 안정화다.[10] 이를 통해 Swift가 바이너리 레벨에서 여러 운영 체제에서 실행될 수 있도록 지원할 것으로 보인다. Swift의 활용 범위가 그만큼 넓어지는 셈이다.

제네릭도 개선된다. 라이브러리 전반에 걸쳐 제네릭을 사용해 Swift 3.0에서는 제네릭 사용이 완성될 것으로 보인다. 타입 시스템 클린업과 문서화도 주목된다. 개발 팀은 Swift 3.0에서 "다양한 서브 타이핑, 타입 시스템의 전환 규칙, 컴파일러 타입 체커 내에서의 구현 등을 재검토하고 문서화할 것"이라고 예고했다. 그리고 Firefox 엔진을 위해 개발한 Rust 언어의 Ownership 기반 메모리 관리 모델이 개발자들 사이에 호평이 높아지자 이를 적극적으로 도입할 것이라고 한다.

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

4.3. Swift 4

Swift 4
The powerful programming language that is also easy to learn.
쉽게 학습 가능한 강력한 프로그래밍 언어.[11]
[clearfix]
Apple WWDC 2017-Session 401
What's New in Swift 4

【 펼치기 ・ 접기 】


2017년 9월 19일, Xcode 9에 포함되어 새롭게 등장한 Swift이다.
Swift 4는 Swift 3의 강점을 바탕으로 만들어졌습니다. 훨씬 더 견고하고 안정적이며, Swift 3와의 소스 코드 호환성을 제공하고, 표준 라이브러리를 개선하며, 스마트 키 경로 및 직렬화와 같은 기능을 추가하는 동시에 이 모든 성능을 갖추고도 빌드 시간은 단축하고 앱 바이너리 크기는 줄였습니다.

Apple 개발자 웹페이지의 Swift 中

인간으로 비유하자면 Swift 3까지는 영유아기, Swift 4부터는 청소년기로 생각해도 좋을 것 같다. Swift 4 컴파일러는 Swift 3, Swift 4, 혼합 모드 3가지를 지원하는데 이것은 Swift 3에서 4로 이동하는 것을 사용자 마음대로 할 수 있게 되는 것이다. Apple은 이에 대하여 "Swift 3는 소스 수준 안정성을 고려하여 언어를 설정했으며, 이제 Swift 4는 앞으로 발전시켜 나갈 기능으로 소스 호환성을 제공합니다."라고 설명하고 있다. Swift 3에서 이미 언어가 완성되었고, Swift 4는 일종의 확장 팩인 셈이다.
[clearfix]
Apple WWDC 2018-Session 401
What's New in Swift 4.2

【 펼치기 ・ 접기 】


2018년 3월 29일 Swift 4.1이 출시되었고, 동년 7월 11일을 기준으로 Swift 4.2가 개발 중이다. 2014년 공개 이후로, 2015년 Swift 2, 2016년 Swift 3, 2017년 Swift 4가 차례로 나오다가 2018년에는 Swift 4.2가 공개되었다. 확실히 애플도 속도를 늦추고 있는 모습이다.
[clearfix]

4.3.1. 새로운 기능

* 유니코드 정확성을 유지하는 문자열 사용이 더 빠르고 용이하며 하위 문자열 생성, 사용 및 관리를 위한 지원 추가
  • Swift 유형의 타입 세이프하고 효율적이며 확장 가능한 키값 코딩을 위해 스마트 키 경로 제공
  • 딕셔너리 및 세트 유형을 생성하고 변경하는 기능 향상
  • struct 및 enum 유형에 대해 아카이브 및 직렬화 지원을 확장하고, JSON 및 plist와 같은 외부 형식으로 직렬화하기 위한 타입 세이프 제공
  • 메모리에 대한 독점적인 접근

4.4. Swift 5

이미 Swift 4부터 페이즈가 느려졌고, 그 이유가 언어가 어느 정도 완성되었기 때문인 만큼, Swift 5에서는 꽤나 많은 기능이 추가될 것으로 예상된다.
2019년 3월 25일, Swift 5가 릴리스되었다.

4.5. Swift 6

Swift 6에서는 동시성 기능이 강화되었다. Swift 6 소개에 따르면 컴파일러가 동시성 프로그램에서 데이터 레이스로부터 안전한 환경을 보장한다고 설명한다.
Swift 10주년 소식과 함께 WWDC24에서 소개되었으며, 2024년 9월 중 Xcode 16과 함께 배포될 예정이다.

5. The Swift Programming Language

The Swift Programming Language
Apple Books Swift 5.7
Swift.org Swift 공식 문서
GitHub.io swift.org에 등록된 Swift 한국어 번역 프로젝트
Apple Books에서 구할 수 있는 Swift 공식 레퍼런스 가이드이다.

양이 꽤 방대한데, 처음 60페이지 정도의 A Swift Tour만 읽어도 언어를 이해하는 데 도움을 받을 수 있다. 그러다 문제가 생기거나, 더 자세히 알고 싶다면 Language Guide를 읽게 되는데, 이게 약 900페이지의 분량이다. 그밖에도 정말 사소한 부분까지 궁금하다면 Language Reference, 옛 버전과 현재 버전 사이에 어떤 변화가 있었는지 궁금하다면 Revision History를 읽어보자.

6. 문제점

Objective-C에 비해 문제가 있었는데 초기 3년 동안에 엄청난 속도로 업데이트를 하면서 언어 동작, API가 계속 바뀌었다. 그리고 이에 따른 고생은 전부 프로그래머의 몫이다. Swift 2 기반으로 코드를 다 짜 놓았는데 Swift 3.0이 배포되며 코드가 싹 다 바뀌었고, 4.0에서 또 바뀌어 버려서 코드를 하나하나 수정해 주어야 하는 일이 발생한 것. 대표적인 문제로 Swift 3.0에 오면서 조금만 큰 프로젝트를 개발하다 보면 Code Completion 기능은 먹통이 된다. 이 부분에 대해서 Apple은 Swift 4 또는 4.2[12]로 마이그레이션할 수 있도록 가이드를 제공하고 있다. Migration to Swift 4 Migration to Swift 4.2

LLVM/ Clang의 아름다운 실시간 오류 검출 기능은 Xcode의 컨디션에 따라서 나왔다 말았다 한다. 이미 Apple 개발자 포럼에는 이와 관련된 문제가 많이 보고되고 있다. Swift 초창기 2.0과 3.0에서 특히 심했으며, Swift 4.2 업데이트 이후부터는 조금 안정된 모습을 보인다.
  • 컴파일 속도
    Objective-C에 비해서 빌드 속도가 현저히 느려졌다. 빌드 타임에 작성된 코드를 Swift로 변경하고 다시 그걸 컴파일하는 듯한 속도감을 보인다.
  • Xcode의 전반적인 반응 속도
    Xcode를 사용하면서 Swift 3.0으로 올리고 나서 CPU 사용을 계속적으로 full로 사용하여 전반적인 동작이 느려지는 문제가 나왔다. Objective-C에서 나온다는 보고는 아직 없다. #
  • 문자열 조작
    문법의 가독성 부분에서 인터프리터 계열 언어 Python의 영향을 받은 것이 무색하게 문자열 조작이 무지하게 불편하다. 유니코드 때문에 실제로 글자 1자가 일정한 바이트 수가 아닌 건 이해가 가지만 이 불편함을 좀 감출 문법적 설탕도 없다. 예를 들어서 어떤 문자열의 인덱스 범위 [4, 8)에 해당하는 부분 문자열을 짤라오고 싶다면 다음과 같은 걸 해야 한다.[13]
    {{{#!syntax swift
let text = "The Swift Programming Language"
let subText = text[text.index(text.startIndex, offsetBy: 4)..<text.index(text.startIndex, offsetBy: 8)]
// subText == "Swif"
}}}
  • 애플 생태계 한정
    태생이 애플 macOS/iOS이고 개발도 막장 IDE의 끝판왕으로 유명한 Xcode 환경 중심이다 보니 이용도 주로 애플 생태계로 한정되고 있어서 윈도우나 리눅스 같은 인기 있는 플랫폼이나 개발 환경에서 이용이 매우 저조하다. 컴파일러 디버거 등 기본적인 도구는 있지만 개발 환경이나 서드 파티 라이브러리나 개발 정보 등 이미 자리를 잡은 C# 등의 언어에 현저히 뒤지고 있어서 아직 접근성에서 떨어지고 사용이 매우 불편하다. Rust 나 Haskell 같은 신생 비인기 언어도 공식 지원 하는 SDL 같은 인기 라이브러리도 스위프트 언어 바인딩을 공식 지원을 하고 있지 않다. 아직 IntelliJ CLion 등 서드 파티 개발 환경 지원도 매우 미지근하다. 개발자 평균/중간 연봉에서도 C++/Java 프로그래머보나 약간 높은 정도에 불과하고 Go나 파이썬/루비 개발자보다 상당히 낮다. 개발자 채용 수요도 Go나 파이썬, 루비 구인 수요보다 압도적으로 적다. 그만큼 수요나 이용이 저조하다는 것. 윈도우나 리눅스 환경에서 스위프트 언어로 개발하는 것은 아직은 스스로 엄청난 개척의 고난을 자초하는 일이라 새로운 신규 개발을 스위프트로 할 이유는 전혀 없고 단지 원래 애플 생태계에서 스위프트로 개발된 성숙한 프로그램이나 게임을 윈도우로 이식하기 위해 어쩔 수 없이 써야 하는 경우뿐이나 이에 해당하는 경우는 극단적으로 낮고 2020년대의 플랫폼 개발도 네이티브가 아닌 멀티플랫폼 프레임워크를 이용하는 경우가 많은데 Swift를 쓰는 멀티플랫폼 프레임워크가 없어 점점 사용처가 줄어들고 있다.
  • 사용처 부족
    특정 생태계에 묶여있는 언어라고 해도 다양한 용도로 사용이 가능하거나 대중적으로 인기를 끌만한 프레임워크 등과 같이 쓸 수 있다면 언어 자체의 인기도 늘어난다.[14] 하지만 Swift는 iOS, Mac 개발을 제외하면 사용처 자체도 전멸했으며 Apple이 새로운 사용처를 개척하려고 하는 시도조차 하지 않는다.[15] 이러다 보니 Swift가 필요한 직종 자체도 매우 제한적이라 결과적으로 Swift 수요와 사용 가능한 개발 인력 수는 점차 줄어드는 상황이다. 관련 통계(2023년 기준) 또한 AI나 각종 신기술 접목 등도 거의 이루어지지 않다 보니 연구 목적으로도 건드는 사람이 없어 장기적으로 봤을 때 암울하기만 하다.

7. 개발 환경

Swift 언어를 공식적으로 지원하는 통합 개발 환경으로는 당연하지만 Apple의 Xcode가 있다. iPad 기기 사용자는 Swift Playground를 사용할 수도 있다. 하지만 현실적으로 macOS / Xcode 외 윈도우 등의 플랫폼에서는 개발 환경은 매우 미비하고, 그나마 낫다는 CLion 환경도 아직 Swift 언어 개발을 지원하는 디버거도 없다. 유료인 CLion도 무료인 VS Code를 Swift 개발에 땡겨 쓰는 거나 다름없어서 Swift 개발을 위해 굳이 CLion을 돈 주고 살 이유는 없다.

8. 미래

데스크탑 OS를 대부분 점령한 마이크로소프트가 적극 지원하는 C#이나 DBMS업계의 최강자 오라클이 적극 지원하는 Java[16]처럼 애플이 적극적으로 밀어주고 있어서 재벌 아버지를 둔 금수저 외아들처럼 태어나자마자 이미 성공을 보장받아 잘나가고 있다. 거기다 잘 안된다 싶으면 바로 내쳐버리는 곳과는 달리, Apple은 한번 밀기로 작정하면 20년 30년 동안 꾸준히 밀어준 역사가 있어서, 다들 묻지도 따지지도 않고 한마음으로 Swift로 달려갔다.

2018년 7월 기준으로 등장한지 4년이 조금 넘었고 주로 iOS 개발에서만 쓰이고 있으나, 프로그래밍 언어 월간 점유율 순위에서 기존에 iOS macOS 개발용으로 널리 쓰이던 Objective-C는 10등, Swift는 11등을 차지하고 있다. 점유율 차이는 0.041%p로, 사실상 동급에 랭크되고 있다. 2021년 1월 기준으로 Swift는 Objective-C를 제치고 TIOBE 순위 13위에 올랐다. (Objective-C는 18위로 하락.) 레거시 코드 때문에 Objective-C가 당장 버려지지는 않겠지만 iOS의 미래는 Swift라는 걸 몸소 증명하는 중이다.

심지어는 경쟁사인 구글도 Java API 저작권을 둘러싼 오라클과의 분쟁의 영향으로 안드로이드의 언어를 Swift로 전환할 지 고려 중이라는 소문이 나왔을 정도. 물론 이건 안드로이드의 Java 생태계를 포기하는 것과 마찬가지라서 어느 정도 무리가 있는 이야기였고, 결국 Google I/O 2017을 통해 Java와 동일한 JVM 언어인 Kotlin을 공식 언어로 발표하였다. 그이후 구글은 다트와 플러터를 밀고 있다. 구글의 차세대 OS인 퓨시아에서 Swift 코드가 일부 구동될 수 있도록 준비 중이라고 한다. #

Java와 C#은 매우 뛰어난 언어이고 인기도 높지만, 가상머신 상에서 바이트코드로 실행되는 언어라 실행 속도 면에서 태생적 약점이 있는데, Swift는 Java와 C#의 장점을 거의 다 가지고 있으면서도 LLVM을 기반으로 C/C++/Objective-C처럼 기계어로 최종 번역 된다는 점에서 일단 성능상의 우위가 있다. Rust에게서 영향을 가장 많이 받았다지만 Rust만의 소유권이나 수명과 같은 시스템은 Swift에서 찾아볼 수 없고, 엄연히 C와 Java 계통의 대중적인 행보를 이어가고 있다. 자세한 것은 Rust 문서 참고. 이와는 별개로, Kotlin은 JVM 언어이기는 하지만 LLVM을 이용한 네이티브 컴파일도 가능하다. 이쪽도 구글의 지원에 힘입어 Swift 못지않게 빠른 점유율 상승을 보이고 있다. Java/C#의 장점과 C/C++/Objective-C의 장점의 행복한 결합. 다만 Apple이 모바일에서는 2인자여도 데스크탑과 서버 시장에서는 존재감이 미미하기 때문에 Mac을 제외한 데스크톱 시장에서의 보급에는 한계가 있다. 추후 애플의 동향이 주목되는 부분.

하지만 애플이 타 플랫폼에 대해 줄창 폐쇄적인 입장을 유지하고 있어서 2020년 기준으로는 사실상 iOS 빼면 쓰이지 않는 실패한 언어라는 평가가 많고 통계(2024년 기준) 으로 스위프트는 시니어 프로그래머 사이에서도 루아나 비주얼 베이직과 경쟁할 정도로 사용 유저가 적으며 신규로 배우는 유저 입장에서도 GDScript[17]나 MATLAB 등의 스크립트 언어에도 밀리는 처참한 성과를 보여주는 언어다. 이렇게 된 이유는 애플이 Swift의 사용처를 애플 기기용 프로그램 작성 이상으로 확장하려는 생각 자체가 없는 문제가 가장 크며[18] 이와 같은 상태가 계속될 경우 Objective-C처럼 도태될 가능성이 높다. 무엇보다 Swift의 본진이라고 할 수 있는 iOS 애플리케이션 개발에서조차 React Native Flutter같은 크로스 플랫폼 프레임워크를 활용하는 기업이 점점 늘어나면서 입지는 앞으로도 위태로울 듯하다.

9. 학습

10. 관련 문서



[1] Apple 소프트웨어 엔지니어링 수석부사장 [2] 제비가 아니다. [3] 정확히 말하자면 기존의 LLVM/Clang을 Apple이 내부적으로 변형한 버전이다. [4] Wikipedia(영어) [5] LLVM 컴파일러의 주요 저자인 그 사람 맞다. [6] 2015년 오픈 소스화 작업과 함께 우분투로의 포팅도 이루어졌다. [7] 2018년 1월에 서비스를 종료했다. 출처 [8] Apple 공식 헤드라인. 원문 한국 [9] Apple 개발자 웹사이트 공식 헤드라인. 원문 한국 [10] 크리스 래트너는 최근 메일링에서 이 목표는 3.0 릴리스에 포함되지 못한다고 밝혔다. [11] Apple 개발자 웹사이트 공식 헤드라인. 원문 한국 [12] 2018년 7월 기준, 아직 개발 중이다. macOS Mojave 및 Xcode 10과 함께 배포될 것으로 보인다. [13] 여러 번의 문자열 조작이 필요한 경우 String 클래스 extension으로 인덱스 범위를 잘라내는 함수를 추가하여 사용하는것이 좋다. (참고: https://stackoverflow.com/a/52011572/22175245) [14] 전자는 MS가 관련 프로젝트를 오픈 소스로 공개하고 ASP .NET CORE, Blazor, MAUI 등으로 사용처를 계속 만들어내는 C#이고 후자는 핫한 Flutter 하나만 믿고 가는 Dart다. [15] 이는 애플이 자사 개발자 컨퍼런스인 WWDC에서 Swift만의 별도 세션을 만드는 게 아니라 대충 다른 발표에 끼워 넣는 모습에서도 드러난다. Java 개발 주체인 오라클이 별도의 날자를 잡아서 자바 세션만 따로 다루거나 아예 닷넷 재단에서 MS와는 별개의 자체 언어 관련 컨퍼런스를 여는 닷넷 계열 언어와 대비된다. [16] 그러나 오라클이 Java를 내치려는 정황이 나오고 있다. [17] 고도 엔진 전용 스크립트 언어. [18] 이를 단적으로 보여주는 사례는 애플의 WWDC에서 Swift 관련 세션이 단독으로 없고 기기 설명 사이사이에 껴있는 것으로 MS의 주력 언어인 C#이 MS가 주도하는 빌드 컨퍼런스 외에도 닷넷 재단이 수시로 C# 단독 컨퍼런스를 연다는 점에서 두 회사의 언어에 대한 입장 차를 볼수있다.