ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS, Swift] Optional 타입
    iOS/기본 원리 2023. 8. 29. 14:25
    반응형

    스위프트에서 Optional은 값을 가질 수도 있고, 없을 수도 있다는 것을 나타내는 독특한 타입입니다.

    다른 프로그래밍 언어들에서는 주로 null 또는 nil을 사용하여 값의 부재를 표현합니다. 그러나 이러한 접근은 여러 문제점을 일으키기도 했습니다. 스위프트는 이런 문제점을 극복하고자 Optional이라는 개념을 도입하여 값을 가지지 않는 상황을 보다 안전하게 다룰 수 있도록 했습니다.

    Optional 변수를 선언하려면 해당 변수 타입 뒤에 '?'를 추가하여 표현합니다.

     

    Optional 타입은 값이 'wrap'되어 있다고 볼 수 있습니다. 이렇게 감싸진 값을 직접 사용하기 위해서는 'unwrap' 과정이 필요하며, 이 과정을 통해 원래의 값을 추출할 수 있습니다.

    var name: String? = "Doze"
    
    if let unwrappedValue = name {
      print("The unwrapped value is: \(unwrappedValue)")
    } else {
      print("The optional was nil")
    }

     

    Swift 5.7 버전부터는 'if let' 구문을 더욱 간결하게 사용할 수 있는 방식이 도입되었습니다.

    var name: String? = "Doze"
    
    if let name {
      print("The unwrapped value is: \(name)")
    } else {
      print("The optional was nil")
    }

     

     

    Optional은 주로 함수 정의, 함수가 null을 반환할 가능성이 있는 경우, 그리고 JSON 응답에서 데이터가 누락될 수 있는 상황에서 사용됩니다.

     

    Optional을 unwrap 하는 방법입니다.

    if let: 옵셔널의 값을 안전하게 추출하고 싶을 때 사용합니다. 값이 존재하면 해당 값을 일반 변수나 상수로 할당할 수 있습니다.

    var name: String? = "ChatGPT"
    if let unwrappedName = name {
        print("Hello, \(unwrappedName)!")
    }

     

    옵셔널 체이닝(Optional Chaining): 옵셔널이 포함된 객체의 프로퍼티나 메서드에 접근할 때 연속적인 'if let'문을 피하기 위해 사용됩니다.

    class Person {
        var name: String?
    }
    var doze: Person? = Person()
    doze?.name = "doze"
    print(doze?.name?.count)

     

    guard let: 조건이 만족하지 않으면 빠르게 함수나 메서드에서 탈출하고자 할 때 사용됩니다. 이는 주로 옵셔널 바인디엥 많이 사용되며, 값의 유무를 검사한 후 값이 없으면 빠르게 종료합니다.

    func printName(person: Person?) {
        guard let unwrappedPerson = person else {
            print("Person is nil!")
            return
        }
        print("Hello, \(unwrappedPerson.name ?? "Anonymous")!")
    }

     

    강제 언래핑('!' 연산자): 옵셔널 값이 확실히 존재한다고 확신할 때 사용합니다. 값이 없는 경우 런타임 오류가 발생하므로 조심스럽게 사용해야 합니다.

    var age: Int? = 5
    let unwrappedAge = age!
    print("You are \(unwrappedAge) years old.")

     

    nil-결합 연산자('??'): 옵셔널 값이 없을 때 기본 값을 제공하고자 할 때 사용됩니다.

    let optionalString: String? = nil
    let nonOptionalString = optionalString ?? "Default String"
    print(nonOptionalString)

     

    반응형

    'iOS > 기본 원리' 카테고리의 다른 글

    [iOS, Swift] Callback 함수와 Closure  (0) 2023.08.30
    [Swift, 패턴] SOLID에 대한 개념  (0) 2023.08.28
Designed by Tistory.