var (variable) : 변수, 변할 수 있는 값
let (constant) : 상수, 변하지 않는 값
var a = 8
a = 10
let b = 5
b = 10 // error!
let name = "samsic"
타입추론이란 위와 같이 선언과 동시에 값을 초기화 해주는 것이다. 이 방법은 말 그대로 컴파일러가 초기된 값("samsic")을 보고 타입을 추론하는 것이다. 컴파일러가 "samsic"을 읽고 이 값이 String 이겠구나 하고 추론한 값으로 타입을 지정하는 것이다. 타입 추론 형식으로 코드를 작성하면 Swift 언어의 특성 중 하나인 설계에 의한 안정성이 보장된다.
하지만 추론기능이 내가 원하는 대로 되지 않을 수 있다.
Swift에서는 Character나 String 값이나 모두 ""를 이용해서 대입한다. 만약 name이라는 변수에 "A"라는 Character를 넣고 싶지만 타입추론 형식으로 코드를 작성할 경우
let name = "A"
type(of: name) // String.Type
name의 자료형은 Character가 아닌 String으로 간주된다.
컴파일러가 초기값을 보고 자료형을 유추할 때 Character나 String이냐 같이 애매할 경우 자료형을 더 큰 범위의 자료형으로 지정해버린다.
(Float -> Double, Character -> String) 으로 간주되기 때문에 내가 원하는 타입으로 정확하기 지정이 안될 수 있다. 또한 네트워크와 통신하는 경우 서버로 데이터를 받기 전까진 값을 알 수 없다. 이와같이 초기값이 없을 경우 타입을 유추할 수 없기 때문에 문제가 될 수 있다. 이런 경우엔 Type Annotation을 사용해야 한다.
swift는 타입 안정성을 위해 항상 모든 변수나 상수가 가지는 데이터의 타입을 알고싶어 한다. 따라서 타입 어노테이션(Type Annotation) 을 해준다. 타입 어노테이션은 직접 자료형을 지정해주는 것이다.
var name
name = "samsic" // error!
위와 같이 타입을 지정해주지 않을 경우 name의 type을 추론할 수 없다는 오류메세지가 발생한다.
var name: String
name = samsic
따라서 초기값을 설정하지 않을 경우 타입 어노테이션(Type Annotation) 을 해줘야 한다.
// let/var 변수명: 자료형
위와 같은 형식으로 자료형을 지정해주면 된다
타입 추론으로 원하는 자료형을 얻지 못할 경우 혹은 초기 값이 없을 경우 사용할 수 있다.