12-23 00:00
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

애플이 스위프트 프로그래밍 언어를 위해 "훔친" 10가지 기능 본문

ICT/Articles

애플이 스위프트 프로그래밍 언어를 위해 "훔친" 10가지 기능

cinema4dr12 2014. 6. 14. 09:13

원문 : http://www.itworld.co.kr/slideshow/87944


뛰어난 예술가는 모방하고, 위대한 예술가는 훔친다는 격언이 있다. 어느 모로 보나 애플은 최근 공개한 iOS용 프로그래밍 언어인 스위프트를 만들면서 여러 가지 기능들을 슬쩍 훔쳤다. 스위프트는 기술적으로 "새롭다"고 볼 수 있겠지만 문서를 자세히 들여다 보면 사실 다른 프로그래밍 언어에 채택되어 널리 사용되는 아이디어를 새로운 이름으로 모은 것에 가깝다는 사실을 알게 된다.

이제부터 스위프트의 가장 중요한 기능들과 그 기능의 출처를 살펴보자. 그 출처란 것은 "언어의 사슬"을 타고 수십 년을 거슬러 올라가기도 한다. 이 사슬은 확정적인 것은 아니다. 스위프트가 아이디어를 차용한 그 출처 역시 더 앞선 시대의 언어에서 그 아이디어를 빌려온 경우가 많다. 결국 그것이 바로 혁신의 오랜 역사다. 그림은 스위프트 문서에서 가져왔다. 


[사전(해시 테이블) – JavaScript]

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


[추론 데이터 형식 – 함수형 프로그래밍 언어]

프로그래머 관점에서 변수를 특정 데이터 형식으로 강제하는 것은 코드 실행 전에 버그를 잡는 효율적인 방법이다. 컴파일러가 데이터 형식을 확인하고 비호환성이 발견되면 플래그를 표시한다.

물론 현대 프로그래밍에서 모든 변수마다 데이터 형식을 일일이 지정하는 고생을 감수할 사람은 없다. 우수한 컴파일러들은 최근 데이터에서 형식을 추론하기 시작했는데, 이 추론은 일반적으로 변수가 초기화될 때 손쉽게 가능한 부분이다. 이와 같은 움직임은 ML과 같은 함수형 언어부터 시작됐으며, 이후 하스켈, 스칼라, 오파 등의 언어에도 등장했다. 마이크로소프트도 이 기능을 닷넷 3.0에 추가한 만큼 이제 주류 기능이라고 할 만하다. 스위프트 덕분에 iOS 개발자들도 이제 키 입력에 드는 수고를 조금 덜 수 있게 됐다.


[데이터 구조체 선언 – C#과 Java]

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


[문자열 템플릿 – 콜드 퓨전, JSP 등]

오래 전 컴퓨터는 숫자를 처리했지만 지금은 프로그래머가 하는 일의 대부분은 문자열을 이어 붙이는 작업으로 구성된다. 많은 프로그래밍 도구들이 변수 값을 템플릿에 삽입하는 기능을 제공한다. 콜드 퓨전, Java 서버 페이지와 같은 웹 도구들은 오래 전부터 데이터와 HTML을 템플릿에서 혼합하는 간편한 방법을 제공해왔다.

Swift는 이스케이프 처리된 여는 괄호 다음에 평가할 식을 넣고 그 뒤에 닫는 괄호를 사용하는 깔끔한 템플릿 시스템을 제공한다. 3번의 부가적인 키 입력은 아마 이 기능을 제공하는 데 필요한 키 입력 중에서는 가장 적은 수일 것이다.


[선택 사항인 세미콜론 – 자바스크립트와 파이썬]

세미콜론을 그렇게 싫어하는 이유가 뭘까? 세미콜론은 프로그래밍 문의 끝을 지정하는 간편한 방법일 뿐이지만, 어떤 이유에선지 세미콜론을 입력하기 싫어하는 개발자의 수가 점점 더 늘어나는 것 같다.

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


[프로토콜(인터페이스) – 자바와 C#]

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


[Tuple – Risp와 Python]

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


[자동 참조(Garbage collection과 비슷) – 자바, C#, Objective-C]

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


[부호 있는 정수와 부호 없는 정수 – C#과 오브젝티브-C]

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


[Closer - Risp와 Scheme에서 JavaScript까지]

JavaScript 프로그래머는 소량의 코드를 묶어서 함수처럼 전달하곤 한다. 이러한 Closer는 Lambda 함수 아이디어를 개발한 Risp, Scheme과 같은 언어에서 가져온 것이다. Swift는 Closer, 그리고 함수를 1급 객체로 전달하는 기능을 제공한다.

Comments