2014년 애플 WWDC 에서 발표.
Objective-C 대체 목적으로 만들어짐.
C 언어는 진입장벽이 높았고, 안드로이드가 추격하는 상황에서 IOS 앱 다양성을 높일 방법이 필요했음.
많은 개발자가 손쉽게 아이디어를 구현할 수 있는 환경을 만들어야함.
따라서, 앱의 성능과 관련되는 부분 (코드 최적화, 메모리 관리, 성능 관리) 등을 시스템이 전담하여 개발자의 부담을 덜어줄 수 있는 언어를 만들고자 함.
아이디어를 가진 사람이 기술에 제한받지 않고 마음껏 아이디어를 구현할 수 잇는 손쉬운 개발 환경
위의 목적으로 스위프트가 등장하게 됨.
기존의 Objective-C 에서의 저수준 프로그래밍을 자동 관리 영역으로 대체, 생소한 스몰토크의 문법을 익숙한 문법으로 바꾸고, Objective-C 와 호환까지 가능하도록 설계.
정적 바인딩
데이터 타입 추론 기능에 의해 컴파일러가 알아서 타입을 결정하기 때문에 동적 바인딩 언어처럼 착각되기도 하지만, 정적 바인딩 언어임.
바인딩: 변수나 상수의 타입을 결정하는 과정
정적 바인딩: 컴파일 전에 타입을 결정
-> 미리 메모리 공간을 맞게 할당해두기 때문에 효율적
동적 바인딩: 실행 중에 타입을 결정하며, 도중에 변경도 가능
-> 메모리를 유동적으로 할당하기 때문에 비효율적일 수 있음
데이터 타입 구분 엄격
선언된 변수와 상수는 컴파일 단계에서 데이터 타입이 정의되어 있어야 하고, 타입이 정의되면 다른 타입으로 변경할 수 없음 -> 안정성 확보
네임스페이스
스위프트는 네임스페이스를 사용해 필요한 객체를 참조.
일반적으로 프로젝트 전체가 네임스페이스의 범위로 지정되며, 같은 프로젝트 내에 작성된 객체는 반입 과정 없이 참조가 가능.
파일 통합
Objective-C : 헤더, 소스파일을 구분. 선언과 구현이 분리되는 형태.
Swift: 헤더 + 소스 파일이 .swift 파일 하나로 통합. 변수, 상수, 각종 객체의 형식에 대한 선언과 내용 구현이 모두 하나의 파일에서 이루어짐.
클래스의 정의와 구현
Objective-C: 헤더 파일에 클래스의 인터페이스를 정의, 소스파일에서는 정의된 인터페이스를 구현. 클래스 선언 시 반드시 상위 클래스를 상속받아야 함.
Swift: 인터페이스 정의 없이 바로 클래스를 구현. 상속 필요 없을 시엔 아무것도 상속받지 않아도 됨.
상속
Objective-C: 다중상속 지원 X, 프로토콜을 정의하여 클래스 객체가 준수해야 할 형식을 제공. 카테고리 개념을 통해 상속 대신 기존 객체 자체를 확장
Swift: 마찬가지 + Objective-C 에서 클래스 객체만 확장할 수 있었던 카테고리에 비해 스위프트의 Extension 은 클래스, 구조체, 프로토콜 등 대부분 객체에 적용할 수 있다.
범용 타입
범용 타입: 개발의 편의와 효율성을 높이기 위해 모든 데이터 타입을 저장할 수 있는 타입
Objective-C: id 타입
Swift: Any 타입, AnyObject 클래스
메소드 호출
Objective-C: 스몰토크 문법 이용. 객체의 메소드 호출하는 대신 메세지를 보내 기능 처리.
Swift: 일반적인 메소드 호출 방식.
nil
Objective-C: 존재하지 않는 객체에 대한 참조를 위해 nil 이라는 상수 사용. NULL 과 유사.
Swift: 옵셔널 타입의 기본값. 값이 존재하지 않음을 의미.
포인터
Objective-C: 포인터 O
Swift: X
익명 함수
lambda 함수
Objective-C: 블록 Block
Swift: 클로저