Profile

생각정리..

Lunight

[Swift] Swift에 대하여..







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의 속도가 느려지는 문제가 발생한다고 한다.