iOS/Swift 상식

Optional Chaining과 nil-coalescing operator(??)의 차이점과 사용 시 주의사항은 무엇인가요?

HJ39 2023. 6. 26. 03:38

코딩을 하다보면 구조체 내부에서 또다른 인스턴스가 들어오는 상황이 생긴다.

그러다 보면 프로퍼티를 따라서 들어가는 경우가 생기는데 이때 프로퍼티가 옵셔널인 경우 nil인지 아닌지 확인해야하는 경우가 있다.

 

예시를 보면 쉽게 알 수 있다.

 

□ Optional Chaining 적용 안한 것

func guardJob(owner: Person?) {
  if let owner = owner {
    if let home = home {
      if let `guard` = home.guard {
        if let guardJob = `guard`.job {
          print("우리집 경비원의 직업은 \(guardJob)입니다")
        } else {
          print("우리집 경비원은 직업이 없어요")
        }
      }
    }
  }
}

 

□ Optional Chaining 적용

func guardJobOptionalChaining(owner: Person?) {
  if let guardJob = owner?.home?.guard?.job {
    print("우리집 경비원의 직업은 \(guardJob)입니다")
  } else {
    print("우리집 경비원은 직업이 없어요")
  }
}

guardJobOptionalChaining(owner: zehye)

zehye?.home?.guard?.job   // nil

zehye?.home = apart
zehye?.home  // Optional(Apartment)

zehye?.home?.guard  // nil
zehye?.home?.guard = superman
zehye?.home?.guard  // Optional(Person)

zehye?.home?.guard?.name  // superman
zehye?.home?.guard?.job  // nil

zehye?.home?.guard?.job = "경비원"
zehye?.home?.guard?.job  // 경비원

 

nil 병합 연산자 (nil-coalescing operator)

옵셔널이 nil인 경우 기본값을 설정하고 싶은 경우, ??를 사용하여 설정할 수 있다.

 

 

 

 

 

※ 참고

'iOS > Swift 상식' 카테고리의 다른 글

Async/Await  (0) 2023.07.23
Swift에서 타입 안전성(type safety)은 어떤 방식으로 보장되나요?  (0) 2023.07.23
Codable  (0) 2023.06.26
Result Type  (0) 2023.03.25
Some  (0) 2023.03.25