본문 바로가기
모바일앱/Swift

[ios] shortening unwrapping 쇼트닝 언래핑 swift5.7

by GeekCode 2022. 4. 12.
반응형

 

 

 

Swift 5.7에서 반영될 Unwrapping과정

 

번역: https://betterprogramming.pub/swift-5-7-unwrapping-optionals-gets-improvement-be81c578e9fa

현재 Xcode 13.3에서 지원안함

Shadowing이란

옵셔널 x를 풀었을 때 동일한 값을 포함하는 x라는 이름의 새 상수를 만들었고 이제 옵셔널 변수 대신 이 상수를 사용합니다.

var x: Int?
        
if let x = x {
   // do something with the new x
}

이러한 작업을 shadowing 이라고 합니다.

 

📌섀도잉은 좋은걸까?

셰도잉에는 몇가지 단점이 있습니다.

  1. 현실적인 상황에서는 변수가 훨씬 긴경우가 많다.
var lastTimeUserEnteredTheApp: Date?

if let lastTimeUserEnteredTheApp = lastTimeUserEnteredTheApp {

   // do something with the new variable
}

그래서 우리가 하는 방법은 이름을 줄이는 방법이다.

var lastTimeUserEnteredTheApp: Date?
   

if let date = lastTimeUserEnteredTheApp {

     // do something with the new variable
}

그래서 우리는 이름을 "date"로 줄였는데, 지금은 "date"가 무엇을 의미하는지 불분명 하게 되었습니다.

우리는 변수이름을 읽을 수 있는 코드를 작성하는 것이 중요한 역할을 한다는 것을 알고 있죠.

따라서 Shadowing으로 돌아가면(즉, 원래 이름을 유지) 새로운 문제에 부딪히게 됩니다. 이제 동일한 이름을 가진 두 개의 변수가 있습니다. 물론 우리는 그것을 처리하는 방법을 알고 있지만(우리 모두는 전문가입니다), 여전히 모범 사례는 아닙니다.

이렇듯 우리가 사용하는 shadowing의 상황이 그리 순탄치는 않다는 것을 알수 있습니다.

swift 5.7에서는 이러한 상황을 처리하는 새로운 방식을 가지고 있습니다.

Shortening Shadowing

기존 언래핑 과정

var x: Int?
        
if let x = x {
   // do something with the new x
}

아래와 같이 만들수 있습니다.

변수가 길면 이 솔루션이 유용합니다.

if let lastTimeUserEnteredTheApp {

  // do something
  
}

또한 또다른 섀도잉 언래핑과도 관련이 있습니다.

guard let lastTimeUserEnteredTheApp else {return}

위 과정은 과연 완벽할까요?

어떤 사람들은 swift 5.7이 허용하는 방식도 단점이 존재한다고 말합니다.

쇼트닝 언래핑의 단점 1.

예를 들어 아래와 같은 작업에서

If var x {

}

우리는 x의 맥락을 잃을 수 있습니다. x가 값이 없는 새로운 변수처럼 느껴집니다. 기존에 사용하던 = x 는 기존 변수를 사용했음을 바로 알수 있게 합니다.

쇼트닝 언래핑의 단점 2.

위에서 셰도잉이 좋은 접근 방식이 아닐수도 있다고 말했는데 그 이유중 하나는 중복 변수를 만드는 것입니다.

하지만 이 솔루션은 셰도잉을 방지하지는 못합니다. 이 방법은 우리가 옵셔널 변수를 숨기도록 하는 방법입니다.

그러나 이 새로운 Swift 5.7 기능은 이름 지정, 중복 변수 및 읽기 가능한 코드에 대해 많은 것을 가르쳐 줄 수 있다고 생각합니다.

 

 

 

 

 

 

 

 

반응형