[Swift] Ch14. 옵셔널 체이닝과 빠른 종료

JJUDEV·2024년 3월 28일
1

Swift

목록 보기
13/17
post-thumbnail

14.1 옵셔널 체이닝

옵셔널 체이닝은 옵셔널에 속해 있는 nil일지도 모르는 프로퍼티, 메서드, 서브스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정입니다.
옵셔널 체이닝(Optional Chaining)은 Swift 프로그래밍 언어에서 옵셔널(Optional) 값에 대한 속성, 메서드, 서브스크립션 호출 등을 쿼리할 때 사용되는 프로세스입니다. 옵셔널 체이닝을 사용하면, 옵셔널 값이 nil일 가능성이 있는 경우에도, 복잡한 검사와 강제 언래핑 없이 속성이나 메서드를 안전하게 호출할 수 있습니다. 옵셔널 체이닝의 결과 역시 옵셔널 값이 되며, 체이닝 중 어느 한 곳이라도 nil을 반환하면, 전체 표현식의 결과는 즉시 nil이 됩니다.

옵셔널 체이닝의 작동 방식
옵셔널 체이닝은 ? 연산자를 사용하여 수행됩니다. 예를 들어, someOptional?.property는 someOptional이 nil이 아닐 경우에만 property에 접근합니다. someOptional이 nil이면, property 접근은 무시되고, 전체 표현식은 nil을 반환합니다.

이러한 방식은 다음과 같은 경우에 유용합니다.

  • 옵셔널 값 내의 속성에 접근할 때
  • 옵셔널 값에 메서드를 호출할 때
  • 옵셔널 값에 서브스크립션(subscription) 인덱스를 사용할 때

아래는 옵셔널 체이닝의 예시입니다.

class Person {
    var residence: Residence?
}

class Residence {
    var numberOfRooms = 1
}

let john = Person()

// 옵셔널 체이닝을 사용하지 않고 numberOfRooms에 접근하려면?
if let residence = john.residence {
    print("John's residence has \(residence.numberOfRooms) room(s).")
} else {
    print("Unable to retrieve the number of rooms.")
}

// 옵셔널 체이닝을 사용하여 numberOfRooms에 접근
if let roomCount = john.residence?.numberOfRooms {
    print("John's residence has \(roomCount) room(s).")
} else {
    print("Unable to retrieve the number of rooms.")
}

14.2 빠른 종료

빠른 종료(Early Exit)는 Swift 프로그래밍에서 조건이 충족되지 않을 경우 코드 실행을 즉시 중단하고 함수나 반복문에서 빠져나가는 기법입니다. 이는 주로 guard 문을 사용하여 구현됩니다. guard 문은 어떤 조건이 참이라는 것을 "보증"하기 위해 사용되며, 조건이 거짓일 경우 실행될 코드를 지정합니다. 빠른 종료를 사용함으로써, 코드의 중첩을 줄이고 가독성을 높일 수 있으며, 예상치 못한 상황이나 오류 조건을 더 명확하게 처리할 수 있습니다.

guard문의 기본 형태는 아래와 같습니다.

guard 조건 else {
    // 조건이 거짓일 때 실행될 코드
    // 반드시 현재의 스코프를 종료해야 함 (예: return, throw 등)
}
// 조건이 참일 때 실행될 코드

guard 문은 다음과 같은 특징을 가집니다.

  • 조건이 참(True)인 경우, guard 문 다음의 코드가 실행됩니다.
  • 조건이 거짓(False)인 경우, else 블록 내의 코드가 실행되며, 이 블록은 현재 스코프(함수, 메소드 등)에서 빠져나가는 구문(return, continue, break, throw 등)을 포함해야 합니다.
  • guard 문은 주로 옵셔널 바인딩과 함께 사용되어, 옵셔널 값이 nil이 아닌 경우에만 특정 코드 블록이 실행되도록 보장합니다.

참고자료

  • 스위프트 프로그래밍 3판(지은이: 야곰, 출판사: 한빛미디어(주))
  • ChatGPT 4
profile
4년차 앱개발자입니다.

0개의 댓글