스위프트: iOS 지원 프로그래밍 언어로 C, Objective-C와 유사하다.
스위프트의 특징으로 널-세이프티, 타입-세이프티를 꼽을 수 있고, "?"라는 옵셔널 기능을 통해 변수를 선언할 때 주의해야 한다. 코틀린에서도 같은 기능을 보았는데, 클래스나 함수에 다양한 파라미터를 통해 값을 전달해야 할 때 안전하지 못한 상황을 방지할 수 있었다.
상수는 값을 선언한 이후에 바꿀 수 없지만, 변수는 바꿀 수 있다.
let constantName:type = value
var variableName:type = value
초기화한 이후 값을 줘도 된다.
변경할 수 없는 값은 미리 상수로 선언해서 안전하게 사용하는 습관을 갖자.
변수/상수 이름 다음 콜론 :
을 통해 데이터 타입을 명시할 수 있다. 이때 대입되는 값은 어노테이션된 데이터 타입과 일치해야 한다. 같은 종류의 데이터 타입일 때에는 var a, b, c:Int
와 같이 한 번에 선언할 수 있다.
:
을 통해 직접적으로 타입 어노테이션하지 않아도 된다.변경할 수 없는 값은 미리 상수로 선언해서 안전하게 사용하는 습관을 갖자.
변수/상수명은 대부분의 문자를 사용할 수 있다. 이때 숫자로 시작하거나 공백 문자, 수학 기호 등은 사용해서는 안 된다. 선언 이후에는 동일 이름을 사용할 수 없고 다른 타입의 값을 저장할 수 없다. 변수를 상수로, 상수를 변수로 바꿀 수도 없다.
print() 함수를 통해 상수와 변수에 저장된 값을 출력할 수 있다. 이때 print() 함수는 넘겨받은 파라미터 값을 출력한다.
\(variable or constant)
로 감싸면 된다.파이썬의 F-string과 유사하게 편하게 문자열을 쓸 수 있는 기능이다.
/single-line/
/*multiple-lines*/
주석 안에(nested) 또 다른 주석이 있을 수도 있다.스위프트는 커맨드를 라인 별로 구분한다. 하지만 싱글 라인에서 여러 명령어를 쓰고 싶을 때에는 ;
를 쓴다.
정수 데이터 타입은 signed/unsigned로 구분된다.
스위프트는 각 정수(signed/unsigned)를 8, 16, 32, 64비트 형태로 제공하는데, 최댓값과 최솟값을 max
, min
프로퍼티로 알 수 있다.
9223372036854775807
64비트 플랫폼의 기본 정수 타입은 Int64로 signed(양수, 음수, 0) 형태 정수를 최댓값 9223372036854775807
, 최솟값-9223372036854775808
까지 제공한다.
정확한 값보다는 플랫폼에 따라 Int가 지원하는 비트가 달라진다는 점을 확인하자.
Uint는 음수값을 사용하지 않는 환경에서만 사용하자.
실수를 표현하는 데이터 타입으로 64비트 Double, 32비트 Float로 구분된다. 정확도는 Double이 더 높다.
스위프트는 타입 세이프 언어로 코드 내 값의 타입이 무엇인지 명시해주기 때문에 데이터 타입이 다른 곳에 잘못 값을 입력하는 걸 방지해준다. 이때 타입 어노테이션을 할 필요 없이 초깃값으로 던져준 데이터 타입을 스위프트 컴파일러가 자동으로 추론한다.
리터럴은 코드를 통해 개발자가 할당한 값이다. 숫자 리터럴은 일반적으로 10진수이지만, prefix를 통해 2진법, 8진법, 16진법으로 표현할 수 있다.
var dec_17 = 17
var bin_17 = 0b10001
var oct_17 = 0o21
var hex_17 = 0x11
실수 리터럴의 경우 지수(exponent)를 통해 값을 표현할 수 있다. e
앞에는 base 수, 뒤에는 지수가 들어간다. 1.7e2
이라는 수는 ''이다.
오버플로우를 방지하기 위해 데이터 타입이 지원하는 수 범위를 고려하자.
정수 데이터가 지원하지 않는 값이 할당되면 에러가 난다. 예를 들어 -128~127 범위인 Int8 데이터 타입에 128은 줄 수 없다.
자바 같은 경우 범위를 벗어나면 비트 값이 이상하게 바뀌었는데, 스위프트의 경우 빌드 이전 데이터 타입과 범위를 확인해 에러를 확인할 수 있다.
다른 종류의 정수끼리 계산할 때에는 더 큰 범위를 지원하는 정수 타입으로 나머지 정수를 캐스팅하자.
정수와 실수를 연산할 때에는 타입을 명시해야 한다.
let pi = 3.141592
let num = 1234
var int_to_double = pi + (Double) num
var double_to_int = (Int) pi + num
특정 타입을 원하는 이름으로 별칭할 수 있다.
typealias AudioSample = Int64
var maxAmplitudeFound = AudioSample.max
타입 앨리아스를 통해 이해가 더 쉬운 코딩이 가능하다.
논리적 데이터 타입 불리언을 통해 참/거짓을 확인할 수 있다.
==
등 논리적 비교 연산자를 사용해야 한다. let i = 1
if i == i {
...
}
조건문 쓸 때 ==, != 등 비교 연산자를 붙이는 데 주의하자.
튜플은 여러 종류의 값을 괄호를 사용해 하나로 묶은 데이터 타입이다. 어떤 종류의 타입이든 한 꺼번에 튜플로 만들어질 수 있다.
let tuple_example = (1, "2", 3.14, true)
let (int_ex, str_ex, double_ex, boolean_ex) = tuple_example
.
을 통해 접근한다는 데 주의하자.let tuple_example = (1, "2", 3.14, true)
print(tuple_example.1)
파이썬과 달리 스위프트는 튜플 내 저장된 데이터를 변경할 수 있도록 허용한다. 하지만 이때 초깃값으로 정해진 '데이터 타입'과 같은 값만 입력할 수 있으므로 차이점을 파악하자.