스위프트는 2010년 크리스 라트너(Chris Lattner)를 필두로 애플의 프로그래머들이 개발을 시작했습니다. Objective-C, 루비, 파이썬, C#, 러스트, 하스켈, CLU 등 많은 프로그래밍 언어의 콘셉트를 참고하여 만들었으며, 2014년 9월 정식 발표된 이후 현재까지 계속 발전하고 있습니다. 큰 변경사항들은 예제와 함께 스위프트 공식 블로그에서 확인할 수 있습니다.

Swift 1.0

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

1.1

애플은 한 달 만인 2014년 10월 1.1 버전을 발표했습니다. 열거형의 원시 값과 관련된 프로퍼티와 이니셜라이저가 일부 변경되었고 실패 가능한 이니셜라이저에 대한 내용이 추가 되었습니다. 더불어 사용자정의 연산자에 “?” 를 사용할 수 있게 되었습니다.

1.2

2015년 4월에는 스위프트 1.2 버전을 발표했습니다. 이 시기는 스위프트 문법의 1차 혼돈기로 1.0과 1.1에 비해 문법의 변화가 많습니다. 다음은 주요 변경사항 입니다.

  • 컬렉션 타입 중 Set를 추가했습니다.
  • @autoclosure의 사용 위치를 변경했으며, 비탈출 클로저(Nonescaping Closure)키워드인 @noescape키워드를 추가했습니다.
  • 타입 메서드와 타입 프로퍼티를 선언할 때 static 키워드를 사용합니다.
  • 캐스트 키워드인 as?,! 를 추가하여 실패 가능한 다운캐스트 연산자를 추가했습니다.
  • 오버플로 나누기 연산자(&/)와 오버플로 나머지 연산자(&%)를 삭제했습니다.
  • 상수 선언 시 바로 값을 할당하거나 초기화하지 않고도, 이후에 작성할 코드 중 1회에 한하여 값을 할당할 수 있도록 변경했습니다.
  • 클로저 획득목록 문법이 명확해졌습니다.
  • 옵셔널 체이닝 문법을 소폭 변경했습니다.
  • 옵셔널 바인딩을 쉼표로 구분해서 한 구문에서 여러번 실행할 수 있도록 변경했습니다.


Swift 2.0

애플은 2015년 6월 WWDC에서 스위프트 2.0 버전을 발표했습니다. 2차 혼돈기였던 이시기는 1.X 버전과는 차이가 컸으나 이후로는 버전 별 변화가 적어져 1차 안정기로 볼 수 있습니다. 2.0버전에서 추가/변경된 사항은 아래와 같습니다.

  • 오류처리와 관련된 do, try, catch, throw등의 키워드를 추가했습니다.
  • #available 키워드로 시스템 버전을 체크할 수 있는 기능을 추가했습니다.
  • try 키워드에 ? 를 추가하여 오류를 옵셔널 값으로 표현할 수 있습니다.
  • 순환 열겨형에 관한 내용을 추가했습니다.
  • guard 키워드로 빠른종료(Early Exit)기능을 구현할 수 있습니다.
  • do-while 구문을 repeat-while 구문으로 변경했습니다.(오류처리 키워드인 do와 중복되기 때문에 변경되었습니다.)
  • String 타입은 더 이상 Collection Type 프로토콜을 준수하지 않습니다.
  • println()함수가 사라지고 print()함수를 사용하도록 통합되었습니다.
  • 프로토콜 확장 기능을 추가해 프로토콜 지향 프로그래밍을 할 수 있습니다.

2.1

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

오픈소스 전환

애플은 2015년 12월 스위프트를 오픈소스로 전환하여 공개했습니다. 자세한 내용은 스위프트 오픈소스 공식 사이트 에서 확인해 볼 수 있습니다. 또한 스위프트 발전에 기여하고 싶다면 Swift Programming Language Evolution 페이지에 수정을 제안할 수도 있습니다.

2.2

2016년 3월, 애플은 스위프트 2.2 버전을 발표했습니다. 향후 3.0 업데이트가 있을 예정이라 변화가 크지는 않았습니다. 큰 변경사항은 아래와 같습니다.

  • 튜플 비교 연산이 기본으로 지원됩니다.
  • 대부분의 키워드를 매개변수 이름으로 사용할 수 있습니다.
  • String 타입 셀렉터가 사라졌습니다.
  • 컴파일 타임에 스위프트 버전을 체크할 수 있습니다.
  • 몇몇 문서화 주석 키워드를 추가했습니다.
  • 변수형 매개변수(var parameter)를 더 이상 사용할 수 없습니다.
  • 디버그 식별자 일부가 변경되었습니다.
  • 프로토콜에 associatedtype 키워드를 추가했습니다.
  • 실패 가능한 이니셜라이저에 모든 프로퍼티가 설정되기 전 실패하면 바로 return nil을 할 수 있습니다.
  • ++와 –연산자 사용을 제한Deprecated 했습니다.
  • C 스타일의 for 반복문 사용을 제한했습니다.
  • 일부 컬렉션 타입에 removeFirst() 메서드를 추가했습니다.


참고