[ Swift ] 옵셔널

스위프트의 optional에 대하여!
김보람's avatar
Oct 04, 2024
[ Swift ] 옵셔널

있을수도 없을수도 있는 값을 말하며
?(옵셔널 타입) !(암시적 옵셔널 타입)을 사용하여 나타낼 수 있고, 주석등을 달아 설명하지 않아도 코드만으로 nil의 허용을 알 수 있어 효율적이다.

  • 선언 방법

let optionalValue : Optional<Int> = nil
let optionalValue2 : Int? = nil

  • ?와 !의 차이점

    • ?의 경우 없을 수 있다를 전제하여 사용하기 때문에 사용하거나 추출시 없을 수 있음에 대비하여 코드를 작성해야하나 !의 경우 값이 있음을 전제하기에 없을 수 있음에 대비하여 코드를 구성하지 않아도 에러가 발생하지 않는다.
      하지만 런타임시 값이 없을경우 런타임에러를 반환할 수 있으므로 되도록 ?를 이용하자
       

[ 옵셔널 값 추출 방법 ]

  • Optional Binding

    nil을 체크한 후 안전한 값을 추출함

    • if - let

      var num:Int? = nil
      if let n = num { 
      //num에 값이 있으면 n에 값이 할당되고 값이 할당되어야만 {}구문이 실행된다.
      //할당되어있지 않으므로 
           print("num은 비어있지 않음") //이 구문은 실행되지 않는다 
      }
      var num:Int? = nil
      
      num = 6 
      
      if let n = num { 
      //num에 6이 할당되었기에 아래 구문이 실행된다.
          print("num은 비어있지 않음")
      }
      • 체크해야할 값이 둘이상일 경우 아래와 같이 나열에서 작성해주어야하고 나열한 값들 모두 nil이 아닐경우에만 실행구문을 실행한다

        if let n = num, let n2 = num2 {}
        var num:Int? = nil
        var num2:Int? = nil
        
        num = 6
        
        func test  () -> Void {
            if let n = num, let n2 = num2 {
                print(n + n2)
            }else{
                print("값의 확인이 필요함")
            }
            
        }
        
        test() //출력 "값의 확인이 필요함"
        
        num2 = 10
        test() // 출력 16

  • Force Unwrapping

    값을 강제로 추출하는 방법으로 변수뒤에 !를 붙여주면서 이 변수엔 값이 존재하니 체크하지 않아도돼 하고 알려주는 것이다. 런타임까지 가야 값이 없을때 에러를 반환하므로 위험하다.

    func printName(name:String) -> Void{
        print(name)
    }
    
    var myName:String? = "영희"
    
    printName(name: myName!) //영희를 출력
    
    
    myName = nil
    
    printName(name: myName!)//값없음 에러 출력

Share article

b0-0d