Optional은 스위프트에 있는 타입 중 하나입니다.
옵셔널 타입을 선언하면 변수나 상수에 값이 있을 수도, 없을 수도 있다는 뜻입니다.
옵셔널 타입이 아닌 경우 변수에 값이 없다면 에러를 일으키지만 옵셔널 타입을 사용한다면 변수에 값이 없어도 에러가 나지 않게 할 수 있습니다.
즉, 에러가 나지 않도록 임시적인 타입을 담아두는 개념이라고 보면 되겠습니다.
var number1: Int = 5
var number2: Int?
위와 같이 number1 변수는 정수형, number2 변수는 옵셔널 정수형입니다. 타입에 "?" 를 붙여 옵셔널 타입으로 사용할 수 있습니다.
옵셔널 타입으로 선언할 경우, 값이 없을 때 에러가 아닌 "nil" 이라는 값을 반환합니다.
위에 number2를 print 로 찍어보면 nil 값이 나오는 걸 볼 수 있습니다.
변수가 옵셔널 타입으로 선언되어 있고, 변수에 값이 있다면 바로 사용할 수는 없고 옵셔널 타입을 Unwrapping 하여 사용해야 합니다.
number2!
변수에 nil 값이 없다는 걸 확신한다면 !을 사용하여 값을 강제로 추출할 수 있습니다. 그러나, 일반적으로 잘 사용하지는 않습니다.
if number2 != nil {
print(number2!)
}
if 문을 통해 변수에 nil 값이 없음을 확인 후, 강제 추출하여 사용할 수 있습니다.
if let num = number2 {
print(num)
}
guard let num = number2 else { return }
print(num)
number2에 nil 값이 존재한다면, num에 값이 담기지 않을 것이고 반대로, nil 값이 존재하지 않다면 값이 담겨 num 변수를 사용할 수 있습니다.
number2 ?? "값이 없음"
삼항 연산자와 유사한 방식으로 기본값을 제시할 수 있습니다. nil 값이 아니라면 number2 변수의 값을 제시하고, nil 값이라면 ?? 뒤에 설정한 "값이 없음" 이라는 문자열을 제시합니다.