Optional(옵셔널): 값이 있을 수도 있고 없을 수도 있는 것을 나타냅니다
'없는 값'은 nil
(””, ‘’, 0 등은 값이 없는 것이 아님, 단지 비어있을 뿐)
모든 변수에 nil
을 넣을 수 있는 것은 아님
예를 들어, name
이라는 변수에 nil
을 넣으려 하면 에러가 발생
var name: String = "전수열"
name = nil // 컴파일 에러!
// error: Nil cannot be assigned to type 'String'
값이 있을 수도 있고 없을 수도 있는 변수를 정의할 때에는 타입 어노테이션에 ?
를 붙여야 합니다. 이렇게 정의한 변수를 바로 옵셔널Optional이라고 하고요. 옵셔널에 초깃값을 지정하지 않으면 기본값은 nil
입니다.
값이 있을 수도, 없을 수도 있는 변수를 정의할 때 타입어노테이션에 ?
를 붙여야 함
이렇게 정의한 변수를 **Optional(옵셔널)**라고 함
옵셔널에 초깃값을 지정하지 않을 경우 기본값은 = nil
var email: String?
print(email) // nil
email = "[email protected]"
print(email) // Optional("[email protected]")
옵셔널로 정의한 변수는 옵셔널이 아닌 변수와 다름
옵셔널로 정의한 변수 ≠ 옵셔널이 아닌 변수
let optionalEmail: String? = "[email protected]"
let requiredEmail: String = optionalEmail // 컴파일 에러!
// error:
// Value of optional type 'String?' not unwrapped;
// did you mean to use '!' or '?'?
requiredEmail
변수는 옵셔널이 아닌 String
이기 때문에 항상 값을 가지고 있어야 함
반면, optionalEmail
은 옵셔널로 선언된 변수이기 때문에
코드가 실행되기 전까지 값이 있는지 없는지 알 수 없으므로
requiredEmail
에는 옵셔널로 선언된 변수를 대입할 수 없음