[iOS Swift] 스위프트는? 스위프트 역사

Clint Jang
8 min readJan 12, 2019

스위프트 개발을 처음 시작하면 무엇이 궁금할 까? 생각해보니

스위프트 역사가 제일 먼저 궁금하지 않을까? 싶었습니다.

그래서 스위프트 공식 사이트공식 블러그를 보고,

스위프트는?’ ,‘스위프트 역사’에 대해 간단히 메모해 봤습니다.

Swift 는?

빠르고 강력한 성능

Swift는 최초 개념 설정 시점부터 빠르게 동작하도록 만들어졌습니다.

Swift 코드는 뛰어난 고성능 LLVM 컴파일러를 사용하여 최신 하드웨어를 최대한 활용할 수 있도록 최적화된 기본 코드로 변환됩니다.

Xcode의 Playground 및 REPL

iPad용 Swift Playgrounds와 마찬가지로 Xcode의 Playground를 사용하여 매우 간단하고 재미있게 Swift 코드를 작성할 수 있죠.

REPL(Read-Eval-Print-Loop)

Xcode의 LLDB 디버깅 콘솔에는 Swift 언어의 대화식 버전이 내장되어 있습니다.

Swift 구문을 사용하여 실행 중인 앱을 평가하고 이러한 앱과 상호 작용하거나, 새로운 코드를 작성하여 스크립트와 유사한 환경에서 어떻게 작동하는지 확인할 수 있습니다. Xcode 콘솔 또는 터미널에서 사용할 수 있습니다.

안전 중심 설계

Swift는 불안전한 코드의 전체 클래스를 제거합니다. 변수는 사용 전에 항상 초기화되고, 배열 및 정수에 대한 오버플로우를 검사하며, 메모리는 자동으로 관리됩니다. 구문은 사용자의 의도를 쉽게 정의할 수 있도록 조정됩니다.

예를 들어 3자로 된 간단한 키워드는 변수(var) 또는 상수(let)를 정의합니다.

또 다른 안전 기능은 기본적으로 Swift 객체가 결코 nil이 될 수 없게 하는 것입니다. 실제로 Swift 컴파일러는 컴파일 시 오류가 있는 nil 객체를 만들거나 사용할 수 없도록 합니다. 이렇게 하면 코드를 훨씬 깔끔하고 안전하게 작성할 수 있으며 앱에서 거대한 카테고리의 런타임 충돌을 방지할 수 있습니다. 하지만 nil이 유효하고 적절한 경우도 있습니다. 이러한 경우를 위해 Swift는 선택 사항이라는 혁신적인 기능을 제공합니다. 선택 사항에는 nil이 포함될 수 있지만, Swift 구문은 ?(옵셔널) 구문을 사용하여 nil을 안전하게 처리하도록 함으로써 컴파일러에 동작을 이해하고 안전하게 처리될 것임을 표시합니다.

Objective-C 상호 운용성

동일한 프로젝트에서 기존 Objective-C 파일과 함께 Swift 코드가 공존하며, Objective-C API에 대한 완전한 접근 권한이 제공되므로 적용이 용이합니다.

멀티 프로그래밍 패러다임을 지원

객체지향, 함수형, 프로토콜 지향 프로그래밍 을 지원합니다.

기존 Objective-C는 객체지향 프로그래밍으로 유연하고 쉽게 프로그래밍을 하여 대규모 소프트웨어 개발을 가능하게 하여주었죠.

Swift에서는 최근 프로그래밍에서 대세가 되는 함수형 프로그래밍을 지원하고 있습니다. Immutable한 변수를 사용하고 순수 함수(Pure Function)만으로 동작하게 하면, 항상 같은 결과를 얻을 수 있으며, 함수의 호출이 상태값에 영향을 받지 않아 병렬처리로 실행되어도 Side-Effect가 적어집니다. 함수형 프로그래밍은 대규모 병렬처리를 가능하게 하여주죠. 더욱이 일급객체를 활용하여 더욱 강력한 프로그래밍을 하게 하여주죠.

프로토콜 지향 언어 입니다. 프로토콜 확장 기능을 활용하면 기능의 모듈화가 더욱 명확해 지며, 다중상속을 지원하지 않치만 그 한계를 넘어가게 하여줍니다. 더불어 참조 타입인 클래스를 사용하는것 보다 프로토콜은 추적 비용이 적게 발생하면서, 클래스의 캡슐화, 추상화, 접근 제어등의 기능을 구현 할 수 있습니다.

‘Swift 1.0’

  • 2014년 6월 2일 애플 세계개발자 회의(WWDC)에서 최초 소개
  • 2014년 9월 9일 Release
  • 베타 버전

‘Swift 1.1’

  • 2014년 10월 22일 Release
  • ? 사용 가능
  • 1.0 에 비해 많치 않은 변화
  • 기타등등

‘Swift 1.2’

  • 2015년 4월8일 Release
  • 성능향상
  • 1.1에 비해 많은 변화
  • if-let 개선(바인딩)
  • 타입 메소드, 타입 프로퍼티 : Static 키워드
  • as 키워드로 업캐스팅/다운캐스팅
  • 클로저 문법 변화
  • 추가 : Set, Objective-C 옵셔널 수식어
  • 기타 등등

‘Swift 2.0’

  • 2015년 6월8일 애플 세계개발자 회의(WWDC)에서 소개
  • WWDC 에서 프로토콜 지향 언어라고 선언 (Technical Leader, Dave Abrahams 데이브 에이브러햄)
  • 2015년 9월 21일 Release
  • https://developer.apple.com/swift/blog/?id=29
  • 1.X 버전과 많은변화
  • 추가 : do, try, catch,throw, #available, guard
  • 제거 : println()
  • protocol extension
  • 추가 : Objective-C에 제네릭
  • 기타 등등

‘Swift 2.1’

‘Swift 오픈소스 전환’

‘Swift 2.2’

  • 2016년 3월Released
  • https://swift.org/blog/swift-2-2-released/
  • C-스타일 for 루프 deprecated
  • ++ , –- deprecated
  • Tuple간의 비교가 가능
  • associated 타입 선언을 방법 변경
  • 컴파일 타임에 Swift 버전 체크가능
  • 기타 등등

‘Swift 3.0’

  • 2016년 9월Released
  • 많은변화
  • https://swift.org/blog/swift-3-0-released/
  • API 디자인 가이드라인 (사용 시점의 명확성, 짧은 것보다 명확한 것이 더 중요 .. 등등)
  • 임포트한 Obj-C API에 네이밍 가이드라인 자동 적용
  • Swift 개선 방향은 커뮤니티와 함께 진행
  • 제거 : Function 파라미터에서 var
  • 제거 : currying func declaration syntax
  • 제거 : ++, — 오퍼레이터
  • 제거 : 스위프트 2.2에서 부터 사용되지 않는 기능의 제거
  • 제거 : C스타일의 for 구문 대신 “…” 등의 범위 연산자를 이용
  • 변화 : 함수의 매개변수 라벨 (ex. test.valueForKey(“bbbb”) -> test.value(key:”bbbb”) .. 이런 느낌)
  • NS(NextStep) 프리픽스가 제거하고 필요없는 단어 정리
  • GCD, CoreGraph 사용의 단순화
  • 기타 등등

‘Swift 3.1’

  • 2017년 3월 Released
  • https://swift.org/blog/swift-3-1-released/
  • 변경 : #availability 가 @availibity -> OS 뿐만아니라 언어 버전도 체크 가능
  • 개선 : 기본 타입 생성(Improved numberic conversion initializers)
  • UnsafeMutablePointer.initialize(from:) 콜렉션 타입 제한, 포인트 사용 제한?
  • 리눅스 관련 지원, SPM(Swift Package Manager)
  • 기타 등등

‘Swift 4.0’

  • 2017년 9월 Released
  • https://swift.org/blog/swift-4-0-released/
  • String 의 많은 변화
  • 프로토콜 : 혼합 타입 가능, where절의 확장 가능
  • 접근수준 변경
  • 제너릭 서브스크립트
  • Codable
  • 안전하지 않은 포인트 사용 변경
  • 기타 등등

‘Swift 4.1’

‘Swift 4.2’

‘Swift 5.0’

잘못 작성된 부분은 알게 되는 데로 수정하겠습니다.

읽어주셔서 감사합니다.

즐거운 하루 되세요 :) 🙇‍

--

--