swift
는 2014년 공개된 프로그래밍 언어입니다. Apple 이 기존에 사용했던 objective-c
를 보완하고자 만든 현대적인 언어입니다. iOS, macOS, Apple TV 등의 프로그래밍에 사용되며 현재 오픈소스로 공개되었습니다.
이 글에서는 swift
의 아주 기본적인 문법에 대해 다루고자 합니다. [edwith]Swift 프로그래밍 입문 강좌에 대한 정리글입니다. 강좌는 무료이기 때문에 듣고 싶으시다면 언제든지 해당 링크를 통해 들어가시기 바랍니다.
콘솔로그 출력하기
문자열 보간법 (String Interpolation)
문자열 내의 실질적인 변수나 상수를 표현하기 위해 사용합니다.
괄호 안에 들어가는 문자가 변수나 상수가 되어 실행됩니다.
상수와 변수 선언하기
띄어쓰기를 그대로 지켜야 합니다. 이 점에 주의하시기 바랍니다.
만약 타입이 명확하다면 다음과 같이 생략할 수 있습니다.
선언만 하고 값은 나중에 할당하기 위해 다음과 같이 사용할 수도 있습니다.
기본 데이터 타입
타입이 다르면 값으로 절대 할당할 수 없습니다.
컬렉션 타입 (Array)
컬렉션 타입 (Dictionary)
컬렉션 타입 (Set)
함수
반환값이 없을 경우 반환타입을 생략하거나 Void 로 설정해야 합니다.
전달인자 레이블을 다르게 사용하게 되면 같은 이름의 함수더라도 다른 함수가 됩니다.
가장 뒤에 … 을 넣으면 변수가 여러개가 되어도 함수에 사용할 수 있습니다.
Swift 에서 함수는 일급객체입니다. 그래서 변수에 함수를 값으로 넣을 수 있습니다.
조건문
if 조건에는 항상 Bool 타입의 값이 들어가야 합니다.
반복문
옵셔널
Swift 에서 옵셔널이란 값이 있을수도 있고, 없을수도 있다는 것을 의미합니다. 예외사항을 최소화할 수 있어서 효율적입니다.
옵셔널은 일반적인 데이터 타입들과 다르기 때문에 함께 사용할 수는 없습니다. 옵셔널 값을 사용하기 위해서는 if-let 을 활용한 옵셔널 바인딩을 사용해야 안전합니다.
위의 경우 만약 값이 nil 이면 else 구문이 실행됩니다.
쉼표를 이용해서 여러 옵셔널 타입을 바인딩할 수도 있습니다.
구조체
구조체는 값 타입입니다.
값 타입이라는 말은, 값을 가져올때 메모리 주소를 가져오는 것이 아니라 값을 복사해서 가져온다는 의미입니다.
인스턴스 프로퍼티와 인스턴스 메서드는 구조체에서 만들어진 인스턴스들이 각각 가지는 값을 정의합니다. 반면에 타입 프로퍼티와 타입 메서드는 모든 구조체가 가지는 값을 정의합니다.
쉽게 말해 구조체 Struct1 에서 인스턴스 instance1 을 만들었다면 instance 에서 인스턴스 값들은 변경할 수 있지만 타입 값들은 변경할 수 없습니다.
클래스
클래스는 참조 타입입니다.
상속할 수 있습니다. 그러나 Swift 에서 다중 상속할 수는 없습니다.
상속을 제외하면 구조체와 유사합니다. 상속시 스태틱 타입 메소드는 제정의할 수 없지만, 클래스 타입 메소드는 재정의할 수 있습니다.
클래스는 참조 타입이기 때문에 불변 인스턴스로 생성되었다 하더라도 클래스 내의 가변 프로퍼티의 값을 변경할 수 있습니다. 물론 불변 프로퍼티는 안됩니다.
열거형
열거형은 값 타입입니다.
값이 없을 경우, C 의 열거형과 마찬가지로 1 씩 증가한 값을 가집니다. 그래서 peach 는 3001 이 됩니다. 정수형이 아닌 경우, case 의 값을 그대로 기본값으로 가지게 됩니다.
Swift 에서 데이터 타입은 모두 구조체로 구현되어 있습니다. Swift 는 구조체와 열거형 사용을 권장합니다. 그리고 Apple 프레임워크는 대부분 클래스를 사용하고 있습니다. 물론 어떤 방식을 사용할지는 개발자의 선택에 달려있습니다.