1. 스위프트 언어의 탄생과 배경
스위프트(Swift)는 애플이 2014 세계 개발자 대회(Worldwide Developers Conference,WWDC)에서 발표한 새로운 언어다.
그동안 앱 개발에 사용되던 오브젝티브-C(Objective-C)를 대체할 목적으로 발표했다.
오브젝티브-C 는 C언어를 기초로 하여 스몰토크(Smalltalk)의 메세지 전달 개념,객체지향 개념을 반영한 객체 지향 언어다
iOS 앱을 개발하기 위해서는 C 언어의 저수준 프로그래밍과 스몰토크의 객체지향 개념을 동시에 구현해야 한다는 부담이 있었고,
C 의 장점이자 단점인 포인터는 오브젝티브-C를 강력한 언어로 만들어 주긴 했지만, 처음 접근하는 사람에게는 높은 장벽으로 작용하기도 했다.
애플은 앱 개발자들이 기술적으로 더 훌륭한 앱을 만들기 보단 기능적으로 다양한 종류의 앱을 만들길 원했다.
개방성을 강력한 무기로 내새우는 구글의 안드로이드에 스마트폰 시장을 잠식당하고 있는 상황에서, 앱스토어의 콘텐츠 다양성을 무기로 하는 시장 지배력을 갖추고 싶어했다.
그러기 위해선 개발자들의 부담을 덜어주는 것이 가장 중요했다.
아이디어를 가진 많은 사람이 기술에 제한받지 않고 마음껏 아이디어를 구현할 수 있는 손쉬운 개발 환경을 만들어 주고 싶어했다.
스위프트는 기존의 오브젝티브-C가 C언어로 부터 가져온 저수준 프로그래밍을 자동 관리 영역으로 대체했고, 스몰토크의 메세지 문법을 사람들에게 익숙한 자바,파이썬,C#의 문법으로 바꾸었으며, 오브젝티브-C와 호환까지 가능하도록 설계되는 등 여러 가지 언어적 강점을 지녔다.
오브젝티브-C가 고급 개발자를 대상으로 사용된 언어라면 스위프트는 개발에 갓 입문하는 사람들까지 무리없이 사용할 수 있는 언어다.
그 대표적인 기능이 인터랙티브 플레이그라운드(Interactive Playground)다.
직관적으로 코드를 작성하여 그 결과까지 볼 수 있는 이 편집기는 편집 창에서 코드를 작성하면 중간 결과물을 보여줄 뿐만 아니라 위 화면과 같이 즉석에서 컴파일하여 처리 결과까지 제공한다.
직관적인 사용자 인터페이스를 통하여 쉬운 접근을 추구하는 애플의 철학이 반영된 결과물이라 할 수 있다.
기술적인 관점에서 스위프트는 애플의 메인 프레임워크인 코코아 프레임워크와 코코아 터치 프레임워크를 모두 사용할 수 있다.
LLVM 컴파일러, 옵티마이저, 오토벡터링, ARC 메모리관리, 런타임 환경 등을 기존 언어의 개발 환경과 거의 동일하게 사용할 수 있다는 장점도 있다.
이처럼 다양한 강점을 통하여 스위프트는 점차 iOS 앱 개발의 강력한 플랫폼 언어로서 자리매김을 하고 있다.
2. 스위프트 언어의 특징
아래 그림은 WWDC 2014에서 발표한 스위프트의 개발 생산성과 앱 기능에 대한 포지셔닝 그래프다.
상대적으로 언어에 대한 진입이 낳고 개발하기 쉬운 자바스트립트(Javascript)나 파이썬(Python), 루비(Ruby)와 같은 동적 바인딩 타입의 언어는 생산성이 좋지만 성능이 부족한 경우가 많고, 성능이 좋은 언어일수록 진입 장벽이 높고 개발하기 어려워 생산성이 낮은 경우가 많다. 이에 비해 스위프트는 개발 생산성과 앱 성능 모두에서 만족할 만한 결과를 가져오는 언어로 포지셔닝 되어있다.
스위프트는 파이썬이나 자바 스크립트처럼 동적 바인딩(Dynamic Binding)을 채용하고 있는 언어가 아니다.
C, C++, 오브젝티브-C(Objective-C),자바(Java)처럼 정적 바인딩을 채용하고 있는 언어다.
데이터 타입 추론 기능에 의해 컴파일러가 알아서 변수와 상수의 타입을 결정하기 때문에 마치 동적 바인딩 언어인 것처럼 착각되기도 하지만, 기본적으로 스위프트는 정적 바인딩 언어다.
스위프트는 데이터 타입에 대한 구분이 엄격하다.
선언된 변수와 상수는 컴파일 단계에서 데이터 타입이 미리 정의되어 있어야 하고, 변수의 데이터 타입이 정의되면 다른 타입으로 변경할 수 없다. 이같은 엄격성을 바탕으로 타입에 맞지 않는 데이터가 변수에 대입되는 것을 사전에 차단하여 안전성을 높일 수 있다.
스위프트는 네임스페이스를 사용하여 필요한 객체들을 참조하는데 일반적으로 프로젝트 전체가 네임스페이스로 지정된다.
같은 프로젝트 내에 작성된 객체일지라도 오브젝티브-C에서는 참조를 위해 일일이 헤더 파일을 반입해야했지만, 스위프트에서는 같은 프로젝트 내에 작성된 객체들은 반입 과정 없이 참조할 수 있다는 뜻이다.
이 덕분에 스위프트에서 import 구문은 UIKit,Foundation 등의 프레임워크나 라이브러리 정도에만 사용하게 되어 개발 생산성을 향상 시킬 수 있게 되었다.
'메모장' 카테고리의 다른 글
Swift 변수와 상수 1 (1) | 2023.03.02 |
---|---|
Swift 반복문 [ while 편 ] (5) | 2023.02.28 |
Swift 반복문 [ for - in 편 ] (5) | 2023.02.27 |
Swift 와 Objective-C 차이 (4) | 2023.02.27 |
Swift 기능/특징 (1) | 2023.02.26 |