Swift 문법 - 옵셔널 (Optional)과 옵셔널 추출(Unwrapping Optional)

eelijus·2022년 12월 9일
0

Swift Syntax

목록 보기
5/11


💡 옵셔널, 옵셔널 추출, 옵셔널 바인딩, 옵셔널 체이닝

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html

옵셔널 (Optional)

타입의 일종. 값이 있을 수도 있고 없을 수도 있는, 변수 혹은 상수가 nil일 수도 있다는 것을 나타낸다.

  • ?

  • !

  • nil : 특정 타입에 대한 값의 부재를 나타내는 키워드

    var thisIsInt: Int
    //컴파일 오류 : nil cannot be assigned to type 'Int'
    thisIsInt = nil

    nil은 Int 형 타입에 할당될 수 없다고 컴파일 오류가 남. Int형으로 선언한 변수는 무조건 ‘정수 타입’의 값이 할당되어야 한다.

    Swift에서는 기본적으로 변수를 선언할 때 non-optional, 즉 어떠한 ‘값’을 변수에게 할당해야한다. 하지만 코딩을 하다보면 변수에 값이 들어가지 않을 수도 있고, 변수 안에 값이 확실히 있다는 것을 보장할 수 없으면 Optional을 사용해야함.

    var thisIsIntOrNil : Int?
    thisIsIntOrNil = nil

    옵셔널 기호를 사용해 이 변수(thisIsIntOrNil)에는 값이 있을 수도, 없을 수도 있다는 것을 알려준 셈.

    var a : Int? = 30
    var b = a
    //컴파일 오류 : value of optional type 'Int?' must be unwrapped to a value of type 'Int'
    var b: Int = a

    a의 뒤에 ? 가 붙었기 때문에 우리는 a에 정수 또는 nil이 할당될 수 있음을 알 수 있다.
    이 때 b의 타입은 뭘까? 바로 옵셔널 타입임! 즉 Int? 이다. Int 타입이 아님.

    옵셔널 추출

    옵셔널 변수의 값을 옵셔널이 아닌 값으로 추출하는 방법. 운 좋게 값이 있을 수도 있고, 아닐 수도 있다.

  • ! : 언래핑(upwrapping)

    var a: Int? = 1206
    //b는 정수형 타입 변수로, 정수값만 받을 수 있다.
    var b: Int = a!

    강제로 wrap을 부시고 값(정수 1206)을 꺼내와 b에 할당한 모습. Int형인 b에 성공적으로 할당되었다.
    근데 만약 옵셔널 추출(unwrapping)을 사용해 강제로 꺼낸 것이 nil, 즉 값이 없다면?

    var a: Int? = nil
    var b: Int = a!

    컴파일 오류는 발생하지 않는다. 허나, b의 값(nil)에 접근하려는 순간 런타임 에러가 발생한다.
    ! 도 옵셔널이기 때문에 ? 와 마찬가지로 초기화 시 값을 요구하지 않는다.

초기화 하지 않을 시 자동으로 nil이 할당됨.

암시적 추출 옵셔널

  • 타입 뒤에 !
    nil 값을 할당할 수는 있지만 접근을 시도하면 런타임 오류 발생. 권장되지 않는다.
profile
sujileelea

0개의 댓글