[Swift] 옵셔널(Optional)에 대해 알아보자 (2) - 바인딩편

안녕하세요~ 차니에요!

 

오늘은 지난 시간에 이어서 옵셔널 바인딩에 대해 포스팅하려고 해요.

옵셔널에 대해 잘 모르신다면 이전 글 한 번 슥 보고 와주세요~

 

1. Optional binding 이란?

Optional Type의 변수에서 값을 추출(unwrapping)하는 과정을 일컬어 Optional binding이라 합니다.

아래로는 여러 바인딩 방법에 대해 알아보도록 할게요~!

2. forced unwrapping

forced unwrapping 예시 (1)

forced unwrapping, 번역하면 강제 추출이라는 뜻으로 Optional Type 변수에서 값을 강제로 추출하는 방법입니다.

사용법은 추출할 변수명뒤에 !를 붙혀주면 됩니다.

그러면 출력 결과에 unwrapping된 값(summer)이 찍히는 걸 볼 수 있습니다.

 

forced unwrapping 예시 (2)

두 번째 예제는 nil 값을 강제 추출하는 과정입니다.

빌드 시점에는 문제가 없지만 런타임 중에 위 코드가 실행된다면 앱이 크래시 나는 상황이 발생할 수 있으니 옵셔널 강제 추출은 사용을 지양하여야 합니다.

 

3. if let/guard let

2021.07.01 - [iOS/Swift] - [Swift] if let vs guard let (기본편)

2021.07.01 - [iOS/Swift] - [Swift] if let vs guard let (응용편)

이전에 if let과 guard let에 대해 작성한 글이 있으니 위 게시글을 참고해주세요!

4. Nil-Coalescing Operator

optional ?? value

번역하면 nil 합병 연산자입니다.

좌측 optional 변수가 nil일 경우 ?? 뒤의 value가 출력됩니다.

Nil-Coalescing Operator

5. Optional Chaining

옵셔널 체이닝이란 옵셔널들이 체이닝 된 형태로 연속된 옵셔널 정도로 볼수가 있겠습니다.

struct Season {
    let season: String
    let reason: String
}

struct Person {
    let name: String?
    let favSeaon: Season?
}

let channy: Person? = Person.init(name: "channy", favSeaon: Season.init(season: "가을", reason: "시원하게 부는 바람이 좋아"))

예제를 위해 Season, Person struct를 정의하였습니다.

옵셔널 체이닝을 사용하지 않았을 때와 사용했을 때를 보여드리겠습니다.

 

5-1. Optional Chaining 미적용

if let channy = channy {
    if let favSeason = channy.favSeaon {
        if let season = favSeason.season {
            print("차니가 가장 좋아하는 계절은 \(season)이야")
        }
    }
}

if let으로 각각의 변수에 값이 있는지 체크하여 처리하는 모습입니다.

해당 조건 중 하나라도 nil이 있다면 정상 출력되지 않을 것 입니다.

 

5-2. Optional Chaining 적용

print("차니가 가장 좋아하는 계절은 \(channy?.favSeaon?.season)이야")

변수명 뒤에 ?가 달린 것은 Optional Type이기 때문입니다.

해당 옵셔널 타입의 변수 중 하나라도 nil일 경우 참조가 불가능하기 때문에 전체 결과가 nil로 떨어집니다.

 

이해가 안되는 부분이 있다면 댓글로 남겨주세요~