관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 프로토콜 타입을 사용할 때 자동완성 any 의미 (existential any, existential type) 본문

iOS 응용 (swift)

[iOS - swift] 프로토콜 타입을 사용할 때 자동완성 any 의미 (existential any, existential type)

jake-kim 2025. 4. 9. 01:24

자동완성에 any가 생성되는 경우

  • swift6.0부터 아래처럼 동작
  • protocol이 2개가 있고, A에서 B프로토콜을 따르는 변수가 있을 때
protocol A {
    var value: B { get }
}

protocol B {}
  • A를 준수하려면 value 변수를 무조건 선언해주어야 하는데 이 때 자동완성을 사용하면 swift6.0부터 any가 자동으로 붙음
    • 아래처럼 에러가 나고 fix버튼을 누르면 자동완성

value변수를 선언하라는 컴파일 에러

  • Fix를 누르면 자동으로 타입 옆에 any키워드가 등장 (swift6.0부터 동작)
    • (이 any키워드를 지워도 정상 빌드됨)
struct MyStruct: A {
    var value: any B
}
  • swift6.0미만에서는 any키워드가 자동으로 등장하지 않았는데 swift6.0부터 재현이유?

any키워드의 의미

  • any키워드는 말 그대로 어떤 타입이라던지 사용할 수 있다는 것인데, 타입 옆에 붙이면 그 타입을 준수하는 어떤 타입이라도 괜찮다는 의미
  • 애플쪽에서 자동완성에서 any가 붙게 swift6.0부터 바꾼 이유는 "개발자에게 명시적으로 주는 비용이 든다는 것을 자각하게 하기위한 표현" 
    • (애플의 swift eveolution에 명시되어있는 내용)

https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md?source=post_page-----ef0ce6bc7bc2--------------------------------

  • 프로토콜을 타입으로 두게되면 dynamic dispatch가 일어나서 성능에 영향을 주는 단점이 있기 때문에 이 경우에 any를 명시적으로 붙게 자동완성에 넣은 것
Comments