옵셔널 사용이 쉽지 않아 다시 정리를 해보려 한다.
nil일 수도 있다let myOptional: String? 이 값은 String과는 완전히 다른 데이터 타입이다.let text: String = myOptional 이라고 text에 넣을 수 없다. ! 붙여준다. let myOptional: String?
myOptional = "Lena"
let text: String = myOptional!
nil값이 들어있다면? : 런타임 오류가 나기 때문. 
nil이 아니면 강제 언랩핑을 해준다! let myOptional: String?
myOptional = nil
if myOptional != nil {
let text: String = myOptional!
} else {
print("myOptional was found to be nil")
}

if let safeOptional = myOptional {
let text: String = safeOptional
let text2: String = safeOptional
print(safeOptional)
} else {
print("myOptional was found to be nil")
}
:myOptional 에 값이 있는 경우 값을 출력, nil인 경우 else 구문 출력

let myOptional: String?
myOptional = nil
let text: String = myOptional ?? "나는 default value야"
print(text)
: nil 이면 "나는 dafault value야" 출력
nil일지도 모르는 property, method, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정이다. nil이라면 : property, method, 서브스크립트 등이 nil을 반환한다. nil을 반환한다. 
struct MyOptional {
var property = 123
func method() {
print("나는 struct의 method야")
}
}
let myOptional: MyOptional?
myOptional = MyOptional()
myOptional?.method()
