-
Swift5.6 - existential anySwift 2022. 5. 2. 10:30
안녕하세요. 그린입니다🟢
이번 포스팅에서는 Swift5.6에서 소개된 existential any에 대해 학습해보겠습니다🙌
우선 existential any가 뭘까요?
existential의 뜻은 실제로 존재하는 즉, 실존이라는 뜻을 사전적으로 가지고 있습니다!
그러면 existential any는 우리가 알고 있는 any 타입에 대해 실존하는 any 타입이라는 느낌으로 다가오네요🤔
그럼 조금 더 자세히 알아보죠!
https://www.hackingwithswift.com/swift/5.6/existential-any
요 사이트를 통해 저는 existential any가 무엇인지 파악했습니다!
조금 더 자세히는 아래 공식 애플 swift 깃헙 레포에서 소개되었어요.
https://github.com/apple/swift-evolution/blob/main/proposals/0335-existential-any.md
existential any?
실존 유형을 표시하기 위해 새로운 any 키워드를 도입했다고 소개를 하는데 우리는 이미 any를 알고 있습니다.
프로토콜을 타입으로 사용하는것을 existential type이라고 하는데요.
Swift에서 프로토콜 지향 프로그래밍이 있죠!
예를 들어서 아래와 같은 코드를 먼저 봐보시죠!
protocol Person { var name: String { get } } struct Man: Person { var name: String } var green: Person = Man(name: "green")
위와 같이 우리는 사용했죠?
즉 green이라는 변수가 Person 프로토콜을 타입으로 사용하는 것입니다.
저는 사실 이렇게 프로토콜 지향 프로그래밍을 많이 해보진 않았지만 아래와 같이 사용될 수 있습니다.
func work(for person: Person) { print(person.name) }
즉 이렇게 파라미터에 프로토콜 타입으로 들어가도 가능했죠.
그런데 Swift5.6에서 부터는 any를 프로토콜 타입 앞에 붙여줘서 existential type으로 사용할 수 있다고 합니다.
또 Swift6에서 부터는 이런 경우 any를 붙여 사용하지 않으면 컴파일 에러가 날거라고 해요.
(사실 부리나케 그래서 알아보게 된 케이스....)
func work(for person: any Person) { print(person.name) }
그래서 제가 생각하기로 왜 이렇게 바뀌었냐!? 라고 한다면 조금 더 명시적으로 하기위해서이지 않을까 싶습니다!
즉 프로토콜 타입으로 하게될 경우와 구조체/클래스 타입으로 가져갈 경우에 헷갈릴수가 있죠.
프로토콜의 변수, 메서드를 사용하는것인지 아니면 구조체/클래스의 변수, 메서드를 사용하는 것인지 헷갈리겠죠?
그래서 명시적으로 any 키워드를 붙여 준다고 생각합니다!
마무리
너무 뭐 내용은 크게 없습니다!
그냥 곧 swift6에서 에러날거다~ 말하니까 무서워서 봤어요!ㅋㅋㅋ
사실 제가 짜는 코드에서는 저런 구현이 크게 많지 않아서 크게 리팩토링해야할건 없지만서도...
프로토콜 지향적으로 한번 좀 짜봐야겠습니다!
'Swift' 카테고리의 다른 글
기본 타입을 Extension하여 편리하게 사용하기 (0) 2022.08.04 WWDC 2022 - Swift 5.7 (0) 2022.06.13 Result (With. Composable Architecture) (0) 2022.04.25 Property Wrapper (0) 2022.04.21 Method Swizzling (0) 2022.01.14