Swift
2014년 6월 2일 WWDC에서 처음 소개된 애플의 개방형 프로그래밍 언어.
기존의 Objective-C와 함께 공존할 목적으로 만들어졌다. 때문에 Objective-C와 마찬가지로 LLVM으로 빌드되고 같은 런타임을 공유한다.
Swift 특징
- C,C++,Objectiv-C,java처럼 정적 바인딩 언어이다.(동적 바인딩언어 : 파이썬,자바스크립트)
- 데이터 타입에 대한 구분이 엄격하다. (let은 컴파일전에 미리 선언되어 있어야하며 var는 데이터 타입을 변경할 수 없다.)
- 프로젝트 전체가 네임스페이스의 범위로 지정한다. 즉 헤더추가없이 객체의 반입이 가능하다.
- 변수는 항상 사용 전에 초기화된다.
- 배열 인덱스는 범위를 벗어난 오류가 있는지 검사된다.
- 정수의 오버플로우가 검사된다.
- nil값이 명시적으로 처리되도록한다.
- 메모리는 자동으로 autorelease된다.
- 오류 처리는 예기치 않은 오류로부터 제어 된 복구를 허용한다.
Swift와 닮은(?) 10가지 언어들과 기능
- Dictionary(해시 테이블) -> javascript , python
javascript의 경우 []를 이용하여 배열을 만들거나 문자열을 입력받는데 이것이 해시 테이블 역할을 한다. 이를 Swift에서는 Dictionary라고 함.
- 데이터 타입 추론 -> 함수형 프로그래밍
데이터 타입은 강제로 명시하지만 역으로 컴파일러가 알아서 변수에 데이터 형식을 지정하게된다(하스켈,스칼라,오파,닷넷 프레임워크 등등)
- 데이터 구조체 타입 선언 -> C# , java
java5와 C#은 제네릭 타입을 통해 구조에 또는 배열에 데이터형식을 컴파일러에게 미리 알릴 수 있도록 지원 <Int,String>
- 문자열 템플릿 -> 콜드 퓨전 , JSP , python
역슬래시와 소괄호를 이용하여 평가식 또는 변수를 출력해 줄 수 있다.
ex)
let num1 = 5
let num2 = 20
let str = "test \(num1+num2) test"
- 세미콜론은 선택사항 -> javascript , python
- 프로토콜(인터페이스) -> java , C#
클래스 모음인 인터페이스에 대해 Swift에서는 프로토콜(Protocol)이라는 용어로 사용한다.
- 튜플 -> 리스프와 python
함수나 메소드에서 두개의 값을 반환할 수 있다.
- 자동참고 -> java , C# , Objective-C
사용하지 않는 메모리는 자동회수하는 루틴으로 Swift에서는 ARC(Auto Referencing Counter)를 사용하는데 Objective-C와 같은 기능.
- 클로저(Closure) -> 리스프 , javascript
클로저란 소량의 소스를 묶어서 함수처럼 전달하는 것으로 Swift에서는 클로저 뿐만 아니라 함수를 1급 객체로 간주 , 인자값으로 함수 자체를 전달하는 기능을 제공
그외..
아파치 라이선스 2.0을 따른다.
애플외에 IBM은 서버사이드로 Swift를 Linux서버에서 실행하여 브라우저에서 볼 수 있고 타인과 공유할 수 있는 IBM Swift Sandbox라는 것을 발표했으며 자사의 클라우드 컴퓨팅 플랫폼인 Bluemix에서도 Swift를 지원한다.
아직까지는 Window용 LLDB가 나오지 않아 디버깅도 지원하지않는다.
Objective-C와 제약없이 사용이 가능한데 이는 Swift의 컴파일러 Backend와 Objective-C의 컴파일러 Backend가 LLVM으로 도일하여 bitcode로 번역되어 컴파일된다.
문제점
Objective-C에 비해 문제점이 발생.
바로 Swift2.0에서 3.0배포되며 코드가 변경 그리고 4.0에서도 코드가 또 바뀌어서 하나하나 수정해야하는일이 발생. 그것도 1년주기로 3번씩 변경되었다.
이부분에 대해 Swift4와 4.2로 변경할 수 있도록 현재 가이드를 제공하고 있다.
LLVM/Clang에서 실시간으로 검출해주는 오류에 대해 Xcode의 상태에 따라 조금씩 문제를 발생하여 이에 관련된 문제가 많이 보고되었다.
1. 컴파일 속도
Objective-C에 비해 빌드 속도가 현저히 느리다.
2. Xcode의 전반적인 반응속도.
3.0부터 Xcode의 속도가 느려지는 문제가 발생한다고 한다.