옵셔널 언래핑
Closed this issue · 0 comments
Youngminah commented
Optional 이란?
- 변수에 값이 있을 수도 있고 없을 때 나타냅니다.
- 옵셔널 변수를 정의할 때에는 타입 어노테이션에 ?를 붙여야 합니다.
- 옵셔널에 초깃값을 지정하지 않으면 기본값은
nil
입니다.
강제추출 !
- 옵셔널 강제 추출 방식은 런타임 오류가 일어날 가능성이 제일 높은 방법이다.
- 옵셔널의 값을 강제 추출하려면 옵셔널 값의 뒤에 느낌표를 붙여주면 강제로 값을 추출하여 반환한다.
- 강제 추출시 옵셔널에 값이 없다면, 런타임 오류가 발생한다.
- 로직상으로 nil이 할당되지 않을 것 같다는 확신이 들 때 사용.
var food: String? = "pizza"
var myFavoriteFood: String = food!
print(myFavoriteFood) //pizza
food = nil
myFavoriteFood = food! //런타임 오류
옵셔널 바인딩
- 옵셔널 바인딩은 옵셔널의 값이 존재하는지를 검사한 뒤, 존재한다면 그 값을 다른 변수에 대입시킵니다.
- 이것을 unwrapping이라고 부릅니다.
- if let~ 또는 guard let ~ else 로 바인딩을 해줄 수 있습니다.
옵셔널 체이닝
- 옵셔널 체이닝은 옵셔널의 속성에 접근할 때, 옵셔널 바인딩 과정을
?
키워드로 줄여주는 역할을 합니다. - 하위 프로퍼티에 Optional 값이 있는지 연속적으로 확인하면서
- 중간에 하나라도 nil이 발견된다면 nil이 반환하는 것이 옵셔널 체이닝 방식.
- 옵셔널 체이닝에 의해 nil 값이 호출 될 수 있기 때문에 옵셔널 체이닝의 값은 항상 옵셔널 값이 됩니다.
- 체이닝의 다중 레벨 연결
- 옵셔널 체이닝의 상위 레벨 값이 옵셔널인 경우 현재 값이 옵셔널이 아니더라도 그 값은 옵셔널값이 됩니다.
- 옵셔널 체이닝의 상위 레벨 값이 옵셔널이고 현재 값이 옵셔널 이라고 해서 더 옵셔널하게 되진 않습니다.
- 옵셔널 체이닝을 통해 값을 검색하거나 메소드를 호출하면 몇 단계를 거치는지 상관없이 옵셔널을 반환합니다.
let isEmptyArray = array?.isEmpty == true
- array가 nil인 경우,
nil
을 반환합니다. - array가 빈 배열인 경우,
true
를 반환합니다. - array에 요소가 있는 경우,
false
를 반환합니다.