본문 바로가기

Dev.iOS/About

[iOS] Swift란?

Swift란
스위프트는 애플의 iOS와 OS X을 위한 프로그래밍 언어이다.
기존의 애플 운영체제용 언어인 Objective-C와 함께 공존할 목적으로 만들어졌다.
오브젝티브 C와 마찬가지로 LLVM 으로 빌드되고 같은 런타임을 공유한다.
클로저, 다중 리턴 타입, 네임스페이스 제네릭스, 타입 유추 등 오브젝티브 C에는 없던 현대 프로그래밍 기능을 포함시켰다.

조금 자세히 살펴보자.

해시 테이블 - 자바스크립트
자바스크립트 프로그래머들은 전통적으로 대괄호를 사용해서 정수를 전통적인 배열로 취하거나 문자열을 받는데, 이것이 해시 테이블 역할을 한다. 이제 스위프트 프로그래머들도 똑같이 할 수 있다. 애플은 해시 테이블을 "사전(Dictionaries)"이라고 부르며, 이를 초기화하기 위한 깔끔한 구문을 제공한다.

추론 데이터 형식 - 함수형 프로그래밍 언어
프로그래머 관점에서 변수를 특정 데이터 형식으로 강제하는 것은 코드 실행 전에 버그를 잡는 효율적인 방법이다. 컴파일러가 데이터 형식을 확인하고 비호환성이 발견되면 플래그를 표시한다. 물론 현대 프로그래밍에서 모든 변수마다 데이터 형식을 일일이 지정하는 고생을 감수할 사람은 없다. 우수한 컴파일러들은 최근 데이터에서 형식을 추론하기 시작했는데, 이 추론은 일반적으로 변수가 초기화될 때 손쉽게 가능한 부분이다. 이와 같은 움직임은 ML과 같은 함수형 언어부터 시작됐으며, 이후 하스켈, 스칼라, 오파 등의 언어에도 등장했다. 스위프트 덕분에 iOS 개발자들도 이제 키 입력에 드는 수고를 조금 덜 수 있게 됐다

데이터 구조체 선언 - 자바
어떤 종류의 데이터가 데이터 구조체에 저장될까? 자바는 버전 5에서 제네릭 형식을 도입해서 프로그래머가 컴파일러에게 HashMap, Array 또는 Collection에 넣을 데이터 형식을 알릴 수 있도록 했다. > 기호와 < 기호는 내부에 들어갈 형식을 지정했다. 이제 스위프트에서도 프로그래머가 컴파일러에게 같은 정보를 알릴 수 있게 됐다.

문자열 템플릿 - JSP
오래 전 컴퓨터는 숫자를 처리했지만 지금은 프로그래머가 하는 일의 대부분은 문자열을 이어 붙이는 작업으로 구성된다. 많은 프로그래밍 도구들이 변수 값을 템플릿에 삽입하는 기능을 제공한다. 콜드 퓨전, 자바 서버 페이지와 같은 웹 도구들은 오래 전부터 데이터와 HTML을 템플릿에서 혼합하는 간편한 방법을 제공해왔다. 스위프트는 이스케이프 처리된 여는 괄호 다음에 평가할 식을 넣고 그 뒤에 닫는 괄호를 사용하는 깔끔한 템플릿 시스템을 제공한다. 3번의 부가적인 키 입력은 아마 이 기능을 제공하는 데 필요한 키 입력 중에서는 가장 적은 수일 것이다.

선택 사항인 세미콜론 - 파이썬
세미콜론을 그렇게 싫어하는 이유가 뭘까? 세미콜론은 프로그래밍 문의 끝을 지정하는 간편한 방법일 뿐이지만, 어떤 이유에선지 세미콜론을 입력하기 싫어하는 개발자의 수가 점점 더 늘어나는 것 같다. 지난 몇 년 동안 일부 자바스크립트 및 파이썬 프로그래머들은 세미콜론이 진정한 선택 사항인지 여부를 두고 논쟁을 벌였다. 세미콜론은 꼭 필요한가, 아니면 그저 미관을 위한 장식일 뿐인가? 스위프트가 이 논쟁에 확실히 끼어들었다. 세미콜론은 라인 끝의 선택 사항이다. 여러 식을 한 라인으로 묶으려는 경우 세미콜론이 필요하지만, 각 식을 개별 라인으로 작성하는 경우 오른쪽 새끼손가락을 혹사해가며 세미콜론 키를 두드릴 필요는 없다.

프로토콜 - 자바
자바와 C#에서 정교한 객체 지향 클래스 구조체를 만드는 프로그래머는 가장 먼저 기본 인터페이스부터 시작하는 경우가 많다. 인터페이스는 클래스가 정의에 부합하기 위해 제공해야 하는 모든 함수에 대한 구조를 정의하는 기본 클래스다. 스위프트는 클래스 모음의 블루프린트에 대해 "프로토콜"이라는 용어를 사용한다.

튜플 - 리스프, 파이썬
메서드에서 가끔 두 개 이상의 값을 반환해야 할 때가 있다. 리스프와 같은 초기 언어는 모든 요소를 튜플 목록으로 간주했는데, 파이썬과 같은 근래의 언어는 메서드에서 반환되는 N 값과 여기에 바인딩되는 N 변수를 맞추기 위한 명시적인 구문을 제공한다. 스위프트도 이 방식을 따른다.

자동 참조(Garbage Collection) - 자바
초기에는 스위프트에 가비지 수집이 도입된다는 이야기가 있었다. 가비지 수집은 메모리를 탐색하면서 더 이상 사용되지 않는 바이트를 회수하는 자동 루틴이다. 자바와 C# 프로그래머들은 이로 인해 컴퓨터가 잠깐 동안 멈추는 현상을 제외하면 가비지 수집을 무척 좋아한다. 스위프트는 자동 참조 카운트를 사용하는데, 이는 오브젝티브-C 사용자들 사이에서 널리 사용된 것과 비슷한 솔루션이다. 이 기능은 그럭저럭 오브젝티브-C에서 물려받았다고 할 만하다.

부호있는 정수와 부호 없는 정수 - 오브젝티브 C 
좋은 시스템 프로그램이란 바이트 레벨에서 작동하는 프로그램을 의미하는 경우가 많다. 자바와 같은 일부 추상적 언어는 부호 없는 정수의 복잡성을 회피한 반면 C#과 같은 언어는 이를 수용했다. 스위프트는 1, 2, 4, 8바이트의 부호 없는 정수와 부호 있는 정수를 제공한다. 오브젝티브-C와 마찬가지다.

클로저 - 자바스크립트
자바스크립트 프로그래머는 소량의 코드를 묶어서 함수처럼 전달하곤 한다. 이러한 클로저는 람다 함수 아이디어를 개발한 리스프, 스킴과 같은 언어에서 가져온 것이다. 스위프트는 클로저, 그리고 함수를 1급 객체로 전달하는 기능을 제공한다.


실행속도는 기존의 언어인 오브젝티브 C보다 빠르다.
기본적으로 컴파일 언어이며 컴파일 하기 전까지는 실행할 수 없다.
이러한 문제를 해결하기 위해 playground가 도입되었다.

main이 없어졌으며, 세미콜론이 없어졌으며 헤더파일이 사라졌다.
(죄다 사라졌네…)

RxSwift 관련 slide 발표자료
http://www.slideshare.net/sunhyouplee/functional-reactive-programming-with-rxswift-62123571

end