Optional(옵셔널): 값이 있을 수도 있고 없을 수도 있는 것을 나타냅니다

'없는 값'은 nil

(””, ‘’, 0 등은 값이 없는 것이 아님, 단지 비어있을 뿐)

모든 변수에 nil을 넣을 수 있는 것은 아님

예를 들어, name이라는 변수에 nil을 넣으려 하면 에러가 발생

var name: String = "전수열"
name = nil // 컴파일 에러!

// error: Nil cannot be assigned to type 'String'

값이 있을 수도 있고 없을 수도 있는 변수를 정의할 때에는 타입 어노테이션에 ?를 붙여야 합니다. 이렇게 정의한 변수를 바로 옵셔널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 '?'?