오늘의 주제

1. 스위프트란 어떤 언어인가?


안녕하세요, 야곰입니다. 


스위프트에 대해 몇 번의 포스팅을 통해 전해드릴 예정입니다. 우왕 짝짝짝!


우리가 알아볼 스위프트는 미국의 유명가수 테일러 스위프트가 아니라 스위프트 검색하면 각종 스위프트 정보가… 가수, 자동차, 작가, 자전거 등등… 꽤 최근에 만들어진 프로그래밍 언어를 이야기 합니다. 



[스위프트 로고]


사전에서 Swift라는 단어를 검색해보면 신속한, 빠른, 칼새 등등의 의미가 나옵니다. 위에 보이는 스위프트 로고 또한 칼새의 형상이죠? 애플에서 스위프트라는 이름의 의미를 직접적으로 발표하지는 않았지만 이 포스팅을 읽고나면 왜 스위프트라는 이름을 썼을지 생각해 볼 수도 있을 것 같습니다. 스위프트라는 언어는 어떤 언어인지, 스위프트에 왜 스위프트라는 이름이 붙게 되었는지 한 번 살펴볼게요 :)


스위프트의 역사

사람의 언어가 시대에 따라 필요한 것들이 바뀌는 것처럼 프로그래밍 언어도 시대의 요구에 맞게 점점 발전합니다. 새로운 언어가 탄생하기도 하고, 기존의 언어에 새로운 기능이 추가되면서 버전 업데이트를 하기도 하죠. 스위프트는 이제 막 발돋움을 시작한 언어이지만, 짧은 시간 안에 많은 변화들을 겪어 왔습니다.


처음의 스위프트는 2010년 크리스 래트너(Chris Lattner)<애플의 핵심 프로그래머 중 한 명이었으나 이제는 애플을 떠나 자동차 회사인 테슬라로 옮긴다고 발표가 났습니다>를 필두로 한 애플의 프로그래머들이 개발을 시작했습니다. 


Objective-C, Ruby, Python, C#, Rust, Haskell, CLU 등 기존의 언어와 신생언어의 많은 부분을 참고하여 만들었습니다. 그리고 2014년 9월 정식 발표된 이후 스위프트는 현재도 계속 발전 중에 있습니다. 또한, 현재는 모든 사항들이 오픈소스로 공개되면서 세계의 수많은 프로그래머들이 협력하여 언어를 발전시키고 있습니다. 스위프트의 굵직굵직한 변경사항은 친절한 예제와 함께 스위프트 공식 블로그(https://swift.org/blog/)에서 확인할 수 있습니다.


지금까지 스위프트가 어떻게 발전되어 왔는지 간략히 살펴볼까요?



버전 1.0

애플은 2014년 6월 처음으로 스위프트의 존재를 발표하고 베타버전을 배포했습니다. 그리고 1.0 버전을 2014년 9월 Xcode 6와 함께 공식 배포합니다. 기존의 프로그래밍 언어의 기능을 대부분 갖추었으며, 안전한 코딩을 위한 안전장치 등 새로운 기능 덕에 많은 프로그래머의 관심을 받았습니다.

버전 1.1

애플은 한 달 만인 2014년 10월 1.1 버전을 발표합니다.

버전 1.2

이듬해 봄인 2015년 4월에 스위프트 1.2 버전을 발표했는데 이 시기는 스위프트 문법의 1차 대 혼돈기입니다. 1.0과 1.1에 비해 문법 변화가 많았습니다.

버전 2.0

애플은 2015년 9월 WWDC에서 스위프트 2.0 버전을 발표했습니다. 2차 대 혼돈기였던 이 시기는 1.X 버전 대와 차이가 컸으나 이후로는 버전별 변화가 적어 1차 안정기라 볼 수 있습니다.

버전 2.1

2015년 10월 발표된 스위프트 2.1 버전은 2.0 버전과 비교했을 때 약간의 편의사항 추가와 버그수정 및 안정화 등에 초점을 둔 마이너 업데이트였습니다

오픈소스 전환

애플은 2015년 12월 스위프트를 오픈소스로 전환하여 공개했습니다. 이제 다른 플랫폼에서도 자유롭게 스위프트를 사용할 수 있습니다. 자세한 내용은 스위프트 오픈소스 공식 사이트(https://swift.org)에서 확인해 볼 수 있습니다. 또, 스위프트 발전에 기여하고 싶다면 Swift Programming Language Evolution 페이지(https://github.com/apple/swift-evolution)에 수정제안을 할 수도 있습니다. 

버전 2.2

2016년 3월 스위프트 2.2 버전을 발표했습니다. 향후 3.0 업데이트가 있을 예정이라 변화가 크지는 않았습니다.

버전 3.0

2016년 9월 스위프트 3.0 버전을 발표했습니다.



현재(2017년 1월) 우리가 사용하는 스위프트의 버전은 3.0.1 버전이지만, 올 해 중으로 4.0 버전을 발표한다는 소식이 전해지기도 합니다. 버전이 업데이트 될 때 마다 새로운 문법이 생겨나기도 하고, 삭제되기도 했습니다. 그래서 이제껏 새로운 버전에 대해 자주 확인해 보아야 하는 수고로움이 있었지만 반대로 생각해 본다면 그만큼 빠른시간 안에 강력한 모습으로 변모하고 있다고 생각할 수도 있습니다. 새로 개발된 언어가 프로그래머들에게 쓰이고 사랑받으려면 많은 시간이 필요함에도 불구하고 스위프트는 오픈소스로 전환하여 많은 프로그래머들의 요구를 수용함으로써 빠른 시간안에 프로그래머들이 원하는 언어로 바뀌어 가고 있으며 더욱 많은 사랑은 받고 있다는 것도 눈여겨 볼 점입니다.



스위프트의 특징

애플이 최초에 스위프트를 발표했을 때 스위프트 언어의 특성을 Safe, Modern, Powerful 이라고 발표했습니다. 그러나 오픈소스로 전환되면서 특징을 Safe, Fast, Expressive로 변경하여 발표했습니다. 더불어 애플은 ‘스위프트는 보다 직관적이고 배우기 쉬운 언어’라고 스위프트를 소개했습니다. 먼저 애플이 발표한 스위프트의 언어적 특성을 항목별로 정리해 보았습니다.

안전성(Safe) 

스위프트는 안전한 프로그래밍을 지향합니다. 소프트웨어가 배포되기 전에, 즉 프로그래밍을 하는 중에 프로그래머가 저지를 수 있는 실수를 엄격한 문법을 통하여 미연에 방지하고자 노력했습니다. 때론 너무 강제적이라고 느껴질 수 있지만 문법적 제재는 실수를 줄이는 데 도움이 됩니다. 버그를 수정하거나 실수를 찾아내는 시간을 절약할 수 있습니다. 옵셔널이라는 기능을 비롯하여 guard 구문, 오류처리, 강력한 타입통제 등을 통해 스위프트는 안전한 프로그래밍을 구현하고 있습니다.

신속성(Fast) 

스위프트는 C 언어를 기반으로 한 C, C++, Objective-C와 같은 프로그래밍 언어를 대체하려는 목적으로 만들어졌습니다. 아직은 부분적으로 미흡하지만 성능 또한 C 언어 수준을 목표로 개발되었습니다. 그래서 스위프트는 성능을 예측할 수 있고 일정한 수준으로 유지할 수 있는 부분에 초점을 맞춰 개발되었습니다. 실행속도의 최적화 뿐만 아니라 컴파일러의 지속된 개량을 통해 더 빠른 컴파일 성능을 구현해 나가고 있습니다.

더 나은 표현성(Expressive) 

지난 수십 년 간 컴퓨터 과학 분야는 발전해왔습니다. 이와 함께 성장한 수많은 프로그래밍 언어는 제 각각의 문법 별로 다양한 장단점이 있었습니다. 스위프트는 이를 참고해 더 사용하기 편하고 보기 좋은 문법을 구사하려 노력했습니다. 개발자들이 원하던 현대적이고 세련된 문법을 구현할 수 있었죠. 그러나 지금의 스위프트가 끝이 아닙니다. 계속된 업데이트를 통해 더욱 보기좋고 쓰기좋은 언어로 발전해 나갈 것입니다.


스위프트는 여러 가지 프로그래밍 패러다임을 채용한 다중 패러다임 프로그래밍 언어입니다. 크게 보면 스위프트는 명령형 프로그래밍 패러다임, 객체지향 프로그래밍 패러다임, 함수형 프로그래밍 패러다임, 프로토콜 지향 프로그래밍 패러다임을 지향합니다. 정확하게는 명령형과 객체지향 프로그래밍 패러다임을 기반으로 한 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임을 지향합니다. 결과적으로 스위프트에서 가장 강조하는 부분은 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임입니다. 기존의 C 언어는 명령형 혹은 절자적 프로그래밍 패러다임을 채용했으며, C++, Java 등의 언어는 명령형 프로그래밍 패러다임과 객체지향 프로그래밍 패러다임을 동시에 채용한 다중 프로그래밍 패러다임 언어입니다. 스위프트는 여기에 함수형 프로그래밍 패러다임과 프로토콜 지향 프로그래밍 패러다임을 더한 언어라고 생각하면 됩니다.



스위프트로 무엇을 할 수 있을까?

많은 분들이 iOS/macOS 애플리케이션을 제작하기 위해 마련된 Cocoa Touch/Cocoa 프레임워크와 스위프트 언어를 동일시 하기도 합니다. 그렇지만 스위프트와 iOS 및 macOS 프로그래밍은 엄연히 다릅니다. 스위프트를 안다 하여 무작정 iOS 프로그래밍을 할 수 있지는 않습니다. 스위프트가 iOS와 macOS용 앱 등 애플 서비스의 앱 개발에 사용할 수 있는 언어로 추가된 것 뿐입니다. 이는 자바 프로그래머가가 모두 안드로이드 앱을 만드는 건 아니라는 점과 같습니다.

현재의 스위프트로는 무엇을 할 수 있을까요?


[애플의 개발자 컨퍼런스인 WWDC 2016 중 장면 발췌]



iOS/macOS/tvOS/watchOS 등 애플 플랫폼에서 동작하는 애플리케이션 제작

스위프트 제작의 최초목적이 애플의 플랫폼을 위한 애플리케이션 제작을 위한 것이었기 때문에 당연히 애플 플랫폼을 위한 애플리케이션 제작에 사용할 수 있습니다.


웹서버용 애플리케이션 제작


[IBM사의 웹서버 프레임워크 Kitura의 로고]


스위프트 언어를 사용하는 웹서버 애플리케이션 제작용 프레임워크가 생겨나는 추세입니다. 대표적으로는 IBM의 Kitura(http://www.kitura.io/)와 퍼펙트리소프트의 Perfect(http://perfect.org/)라는 프레임워크가 있습니다. 앞으로 스위프트를 위한 다양한 프레임워크가 생겨날 것으로 예상됩니다.

리눅스, 맥 등에서 사용할 프로그램 제작

스위프트를 공식적으로 컴파일 할 수 있는 환경은 현재 애플 플랫폼과 리눅스(Ubuntu) 환경 뿐입니다. 그렇기 때문에 우리가 사용하는 PC 환경 중에서는 맥이나 리눅스 등에서 간단히 사용할 프로그램을 제작해 볼 수 있습니다.



스위프트는 오픈소스이기 때문에 미래에 다른 플랫폼에서 스위프트를 위한 컴파일러를 제공하게 된다면 다른 곳에서도 스위프트를 사용할 수 있게 됩니다. MS에서 윈도우 애플리케이션을 제작하기 위해 스위프트를 사용할 수 있도록 제공하거나 구글에서 크롬북 등에서 동작할 애플리케이션 제작을 위해 스위프트를 사용할 수 있도록 제공해 준다면 스위프트로 더 다양한 플랫폼의 애플리케이션 제작도 충분히 가능하게 된다는 뜻입니다.




스위프트 사용 환경

스위프트는 오픈소스로 전환된 이후 매킨토시 컴퓨터 및 macOS 외의 다른 환경, 즉 리눅스 및 윈도우 등에서도 사용할 수 있습니다. 그렇지만 아직까지는 스위프트의 문법을 익히고 연습하기에는 애플에서 공식 지원하는 Xcode의 플레이그라운드와 REPL(Read-eval-print-loop)이 가장 편리합니다. 그 외에 웹에서 손쉽게 스위프트 문법을 익히고 실행할 수 있게 서비스를 제공하는 곳도 있습니다.


Xcode(플레이그라운드)


[Xcode 아이콘]


Xcode는 macOS에서 동작하는 애플의 통합개발환경입니다. Xcode는 맥 앱스토어에서 무료로 내려받아 설치할 수 있습니다. Xcode로는 맥용 애플리케이션 제작부터 iOS, watchOS, tvOS 등의 애플리케이션 제작, 프레임워크 및 라이브러리 제작 등등 다양한 프로그래밍을 할 수 있습니다. Xcode의 기능 중 하나가 플레이그라운드입니다.



[플레이그라운드 아이콘]

플레이그라운드(Playground)는 별도의 프로젝트 생성 없이 스위프트 코드를 실행할 수 있는 스위프트 코딩 환경입니다. 기본 문법 연습에서부터 복잡한 코드 테스트까지 다양한 기능을 수행할 수 있습니다. 스위프트를 맛보고 문법 연습을 하기에 더할 나위 없이 좋은 도구입니다. 


REPL

[REPL 사용화면]


스위프트는 인터프리터 언어에서 주로 사용되는 REPL(Read-eval-print-loop)으로도 코드를 실행할 수 있습니다. 물론 스위프트는 인터프리터 언어가 아닌 컴파일 언어지만 기존의 인터프리터 언어의 REPL과 거의 비슷하게 사용할 수 있습니다. REPL은 간단한 코드를 직접 입력하여 바로바로 결과를 볼수있는 환경과 편의를 제공해주는 툴입니다. 
맥에서 스위프트의 REPL을 사용하려면 Xcode가 설치된 macOS의 터미널Terminal 애플리케이션을 실행하면 됩니다. 더 정확히 말하자면 Command line tools for Xcode가 설치되어 있어야 합니다(Xcode가 설치되지 않았을 때는 따로 설치해주어야 합니다. Xcode를 설치하면 자동으로 설치되는 도구입니다). /Application/Utilities 폴더에 위치한 터미널 애플리케이션을 실행하고 swift 라고 명령어를 입력하면 Swift REPL이 실행됩니다. 

    


[IBM Swift Sandbox]


스위프트 코드를 macOS 환경이 아닌 다른 환경에서도 쉽게 테스트할 수 있도록 몇몇 웹사이트에서 플레이그라운드 또는 REPL과 유사한 환경을 제공합니다. 스위프트 코드 작성 및 실행도 할 수 있고, 자신이 작성한 코드를 다른 사람들과 공유를 할 수도 있어서 매우 유용합니다. 대표적으로 IBM이 웹에서 스위프트를 작성하고 실행할 수 있는 페이지를 제공합니다. (https://swiftlang.ng.bluemix.net)


모바일 환경


[iPad용 Swift Playgrounds]


App Store에서 Swift Playgrounds를 검색해보면 아이패드에서 스위프트 코드를 작성하고 테스트해 볼 수 있는 애플리케이션(https://itunes.apple.com/app/swift-playgrounds/id908519492?mt=8)을 찾을 수 있습니다. 직접 자신만의 코드를 작성할 수도 있으며, 게임을 활용한 튜토리얼을 따라 문제를 해결해 나가며 스위프트를 익힐수도 있습니다. 또, 플레이그라운드를 활용하여 바로 결과들을 확인할 수 있는 여러가지 템플릿들도 제공이 되고 있으므로 재미있게 스위프트를 배워볼 수 있습니다.


리눅스

[우분투 로고]


스위프트 코드를 리눅스에서 작성하고 컴파일 할 수 있습니다. 스위프트 다운로드 페이지(https://swift.org/download/#linux)에서 리눅스용 스위프트 패키지에 관한 안내를 찾아볼 수 있습니다. 해당 패키지에는 스위프트 컴파일러를 비롯하여 관련 툴이 포함되어 있습니다.


마치며

애플이 스위프트는 배우기 쉬운 언어라고 발표하였지만 다른 프로그래밍 언어를 알고있는 분들 중 스위프트를 처음 접하는 분들은 조금 어려움을 느낄수도 있습니다. 기존 언어의 프레임에 갖힌 개념들 때문입니다.

사람의 언어가 시대에 따라 필요한 것들이 바뀌는 것처럼 프로그래밍 언어도 시대의 요구에 맞게 점점 발전합니다. 프로그래밍 언어의 기본은 그 뿌리가 비슷하기 때문에 문법의 모양새는 크게 다르지 않아보이지만 세부적인 기능과 개념들은 매우 다를 수 있습니다. 또, 각각의 언어가 지향하는 목표점들도 조금씩 상이합니다. 그래서 새로운 언어를 배울 때에는 기존의 언어에서 배웠던 개념에 자꾸 끼워 맞추려는 노력보다는 처음 배워간다는 마음가짐으로 그 언어의 특성들을 있는 그대로 받아들이는 자세도 중요할 것 같습니다.

크레이그 페더리기(Craig Federighi) 애플 소프트웨어 엔지니어링부 시니어 부사장이 2015년에 The Next Web에서  인터뷰 중 “개발자들이 사용하는 주 언어가 스위프트가 됐으면 좋겠다”, “스위프트를 처음 개발할 때 모바일 앱부터 클라우드까지 어디서든 쓰일 수 있는 언어가 될 수 있도록 신경썼다”라고 말했습니다. 그리고 결과적으로 “스위프트는 향후 20년간 쓰일 주류 언어가 될 것”이라고 말하기도 했습니다. 

이번에 스위프트라는 언어에 대해 간단히 알아본 여러분은 어떻게 생각하시나요? 저는 개인적으로 스위프트에 대해 알아가면 알아갈수록 정말 매력적인 언어라는 생각을 하게 됩니다. 크레이그 부사장의 말이 현실화 될 것 같기도 해요 :) 

다음 포스팅에서는 스위프트의 기초 문법에 대해 알아보겠습니다. 추운 날씨 감기 조심하시고 다음 번에 또 뵈어요~


* 본 글의 일부내용은 필자의 저서 [스위프트 프로그래밍](2017, 한빛미디어)(http://book.naver.com/bookdb/book_detail.nhn?bid=11445773)에서 요약, 발췌하였음을 알립니다.





by yagom

facebook : http://www.facebook.com/yagomSoft

facebook group : https://www.facebook.com/groups/yagom/

twitter : http://www.twitter.com/yagomSoft ( @yagomsoft )

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


'Swift > 기본문법' 카테고리의 다른 글

스위프트 시작하기  (0) 2017.05.08
Swift - 프로토콜, 익스텐션  (0) 2017.03.07
Swift - 구조체 클래스  (0) 2017.02.28
Swift - 함수, 콜렉션 타입  (0) 2017.02.06
Swift 기초문법 - 변수, 상수, 기초 데이터 타입  (0) 2017.01.25
Swift란 어떤 언어인가?  (0) 2017.01.23
Posted by yagom


티스토리 툴바