swift는 타입-세이프 언어이다. 타입 세이프란 언어가 값에 대해 타입이 명확하도록 도와주고 코드에서 같이 동작할 수 있도록 해준다.
Swift는 변수를 식별 가능한 이름으로 값을 저장하고 참조한다. 또한 값을 변경할 수 없는 변수, 즉 상수를 사용하여 코드를 더 안전하고 명확하게 만든다.
변수(variable)는 값을 저장하는 공간. 변수는 var 라는 키워드를 앞에 붙여 표현한다.
var number = 1
number = 2
변수에 할당한 값은 언제든 변경할 수 있다.
반대로, 상수(constant)는 값을 변경할 수 없는 공간이다. 상수에는 값을 한번 할당하면 그 이후로는 상수의 값을 변경할 수 없다. 키워드는 let 이다.
let number = 1
number = 2 //오류가 난다!
위의 예시처럼 상수와 변수는 사용하기 전에 반드시 선언이 되어야 한다.
룰
통상적으로 지켜지는 룰
상수 또는 변수를 선언할 때 저장할 수 있는 값의 종류를 명확하게 하기 위해 타입 명시를 할 수 있다. 타입 명시는 상수 또는 변수 이름 뒤에 콜론과 공백 한칸뒤에 사용할 타입 이름을 적어 사용한다. 다음으로는 상수와 변수의 여러 타입들에 대해 살펴보자.
Int 와 UInt가 있다. 두 타입은 완전히 다른 타입으로 두타입끼리의 교환도 자원을 소모시킨다.
var num: Int = -1
let unsignedNum: UInt = 1
print("int : \(num), uint: \(unsignedNum)")
num = Int(unsignedNum)
알고리즘 문제를 풀다보면 Int32, UInt64와 같은 타입을 볼 수 있다. swift는 현재 플랫폼의 네이티브 사이즈와 같은 Int, UInt 정수타입을 제공한다.
ex) 32-bit 플랫폼에서 Int는 Int32와 같은 크기를 가짐
Bool이라는 키워드로 나타나며 참(true) 또는 거짓(false)만 값으로 가진다. Swift는 2개의 부울 상수 값인 true 와 false 를 제공한다.
let isTrue: Bool = true
let isFalse: Bool = false
Float와 Double은 부동소수점을 사용하는 실수이며 부동소수 타입이라고 한다.
var floatVal: Float = 12345.6
var doubleVal: Double = 12345679.1
swift에는 타입 추론이라는 기능이 있다. 그래서 사용자가 변수나 상수에 타입 명시를 하지 않아도 알아서 추론해 지정하는 것이다.
let pi = 3.14159
그럼 다음과 같은 변수는 Double이라고 판단할까 아님 float이라고 판단할까?? 정답은 Double이다. swift는 부동 소수점 숫자의 타입을 추론할 때 항상 float보다 Double을 선택한다.
정수와 실수 타입의 변환은 명시적으로 변환해야 한다.
let three = 3
let point = 0.14159
let pi = Double(three) + point
변환과정이 없으면 덧셈이 허용되지 않는다. 반대로 실수도 정수로 변환해야 한다. 실수를 새로운 정수 값으로 초기화할 때 소수점 아래를 버린다.
character는 하나의 문자를 의미한다. 문자를 표현하기 위해서는 값의 앞 뒤에 큰따옴표를 사용하여 표현한다.
let char: Character = "A"
String은 문자의 나열을 의미한다. 값의 앞뒤에는 마찬가지로 큰따옴표를 사용하여 표현한다.
let name: String = "amy"
빈문자열을 생성하려면 이니셜라이저를 사용하여 생성할 수 없다.
var gender: String = String()
append() 메서드를 사용하여 문자열을 이어붙일 수 있다
gender.append("male")
+연산자를 통해서도 문자를 이어붙일 수 있다
gender = name + "is" + gender
print(gender)
String 타입에는 기본적으로 많은 기능이 구현되어 있다.
문자열을 비교하여 참과 거짓을 알아낼때 == 연산자를 사용한다.
var isSame: Bool = false
isSame = name == "amy"
isSame = name == gender