[iOS] Swift의 옵셔널 체이닝은 어떤 상황에서 사용하는 것이 가장 효과적인가요?

Zerom·2024년 1월 17일
0

iOS 질문 답변

목록 보기
2/9
post-thumbnail

내가 생각한 대답

  • nil이 아니라고 확신하지 못하는 옵셔널 표현식의 멤버에 접근할 때, 특히 연쇄적으로 옵셔널 타입일 때 가장 유용한 것 같습니다. 만약 상위 옵셔널타입이 nil이 아니라고 확신한다면 강제언래핑이 조금 더 간결할 것입니다. 다만 그럴 경우 만약 옵셔널 타입이 nil이라면 런타임 에러가 발생해서 유저에게 안좋은 경험을 줄 수 있다고 생각합니다. 그래서 안정성을 위해 하위에 연속해서 옵셔널 타입이 있다면 옵셔널 체이닝을 통해 접근을 하는 것이 좋다고 생각합니다.

추가 질문

옵셔널 체이닝과 강제 언래핑의 차이점을 어떻게 설명하시겠습니까?

  • 강제 언래핑은 말 그대로 강제로 언래핑 해서 옵셔널이 아닌 값을 추출하는 방법이기 때문에 만약 nil이라면 런타임 에러가 발생합니다.
  • 옵셔널 체이닝은 옵셔널 표현식의 멤버에 접근할 때 사용하는데 장점은 옵셔널을 하나하나 언래핑 하지 않아도 되고 옵셔널이 가지는 안전성이라는 장점은 그대로 사용할 수 있습니다.

참고 내용

옵셔널 타입이란?

  • 변수 타입 뒤에 ?가 붙은 것으로 값이 있을 수도 있고, 없을 수도 있는 타입
  • 옵셔널 타입 변수에 값이 할당 되었다면 optional(값)으로 도출
  • 옵셔널 타입 변수에 값이 할당 되어있지 않다면 nil로 도출

옵셔널 언래핑 방법에는 어떤 것들이 있을까?

  1. 강제 언래핑

    • 말 그대로 강제로 언래핑하는 방법
    • 옵셔널 타입 뒤에 !를 붙여서 언래핑
    • 만약 nil일 경우 런타임 에러를 발생시킬 수 있기 때문에 정말 확실할 때가 아니면 사용 지양
  2. 옵셔널 바인딩

    • if let, guard let 등을 이용해 안전하게 언래핑 하는 방법
    • if let : 추출될 값을 저장할 상수를 만들어 nil이 아닐 경우 if문 내에서 해당 상수를 사용할 수 있도록 하는 방법
    var str: String?
    str = "Hello"
    
    if let hi = str {
    	print(hi) // "hello"
    else {
    	print("하이여~")
        // 만약 hi가 nil이라면 "하이여~" 출력
    }
    • guard let : 추출될 값을 저장할 상수를 만들어 nil이 아닐 경우 다음 코드에서 해당 상수를 사용할 수 있도록 하는 방법
    var str: String?
    str = "Hello"
    
    func sayHello() {
    	guard let hi = str else { 
        	return print("하이여~")
            // 만약 hi가 nil이라면 "하이여~" 출력
        }
        print(hi) // "Hello"
    }
  3. 옵셔널 체이닝

    • 연쇄적으로 프로퍼티, 메소드, 서브스크립트의 값이 nil인지 확인하는 방법
    • ?를 붙여서 사용하고 하나라도 nil이면 전체 결과를 nil로 도출
    • 마지막으로 오는 타입이 옵셔널 타입이 아니더라도 도출되는 값은 옵셔널타입
    • 도출되는 값까지 언래핑을 하고 싶으면 추가적인 언래핑 방법을 사용해야함
    person.house?.animal?.dogType
    // house, animal 중 하나라도 nil 값이면 nil, 둘 다 값이 있으면 dogType을 도출하지만 옵셔널 타입
  4. nil coalescing

    • 옵셔널 타입 뒤에 ??를 붙여 사용
    • nil이 아니라면 해당 값을 추출해서 도출, nil이라면 ?? 뒤에 값을 도출
    var str: String?
    str = "Hello"
    
    print(str ?? "하이여~)
    // str이 nil이 아니기 때문에 "Hello" 반환, 만약 nil이라면 "하이여~" 반환
profile
꼼꼼한 iOS 개발자 /
Apple Developer Academy @ POSTECH 2기 / 멋쟁이사자처럼 앱스쿨 1기

0개의 댓글