https://developer.apple.com/videos/play/wwdc2022/110353
Swift에서 프로토콜의 설계를 진행하다보면 여러가지의 추상화 타입을 만들게 되고 이를 기반으로
끝없이 타입을 추론해가며 개발이된적이 있다 그리고 여러가지 이유로 개발을 진행할때 많은 부분들의 추상화를 고려해야할 사항이있는데 POP기반의 프로그래밍을 진행하다보면 나도모르게 메모리에 부담을 준다거나, 타입추론을 끝없이 초래해서 빌드속도를 느리게할수도있다 그래서 이러한 현상을 조금이라도 유연하게 대처하기위하여 swift에서 새로운 기술이 나왔다고한다.
protocol Farm {
var animals: [Animal] { get }
}
protocol Animal {
func makeSound() -> String
}
protocol AnimalBag<Animal> {
associatedtype Animal
var bags: [Animal] { get }
}
extension Farm {
// 새로운 배열 생성, 배열을 생성할때마다 새롭게 메모리에 할당을 진행함
// 이는 animalBag의 요소들이 큰 경우에는 메모리적으로 큰 이슈가있음
// var animalBag: [Animal] {
// return animals.map { $0 }
// }
// 새로운 배열 생성, 배열을 생성할때마다 새롭게 메모리에 생성하는게 아닌 필요할때 만드는 방식을 사용
// some 키워드를 사용하여 여러타입을 추론하는게 아닌 특정한 형태의 Collection 이라는 사실을 알려줌
// 하지만 여기서도 Collection안의 Element가 무엇이 들어갈지 모르기때문에 이는 또다시 추상화를 진행해야함
// var animalBag: some Collection {
// return animals.lazy.map { $0 }
// }
// func animalBagUserFunction() {
// animalBag.forEach { ($0 as? Animal)?.makeSound() }
// }
// 위에서 이야기한 마지막 문제점을 해결할수있음 이렇게 진행이된다면 이는 Collection의 Element가 Animal 이라는 사실을 알려주기때문에
// 빌드하는 과정에 타입추론을할때 더 빠른속도를 가질수잇음
// POP스러운 개발을 진행할때 만약에 내가 위에서 이야기한 요소들을 전혀 고려하지않는다면 복잡한 설계를 진행할때 빌드 속도가 느려지게되기떄문에 이슈를 초래함
// 그리고 기존의 some Collection 이라면 해당 animalBag을 사용하는 실제공간에서 Animal 에서 정의한 makeSound() 함수를 사용을 하기위해서는
// 또다시 타입추론이 들어가게되지만 실제 이를 사용하는 공간에서 makeSound() 를 사용할수있음 Animal이라는 요소라고 이미 정의가 되어있기때문에 ex
// func animalBagUserFunction() {
// animalBag.forEach { $0.makeSound() }
// }
var animalBag: some Collection<any Animal> {
return animals.lazy.map { $0 }
}
}
이렇게 점점 진화하는 Swift언어를 보다보면 추상화 / 타입추론등에 대해 공부해야할 사항들이 끝없이 늘어나고 새롭게 생기는 기술들을 적극적으로 활용하다보면 코드의 퀄리티, 빌드속도, 안정성등을 챙기기 좋은 코드들이 만들수있을 것 같다 이를 공부해서 적극적으로 사용해봐야겠다
'Swift 공부' 카테고리의 다른 글
Actor 공부하기 (0) | 2024.09.28 |
---|---|
WWDC2021 Protect mutable state with Swift actors (1) | 2024.09.21 |
WWDC 2021 Meet AsyncSequence 정리 (1) | 2024.09.18 |
WWDC 2021 Explore structured concurrency in Swift 정리 (0) | 2024.09.17 |
WWDC 공부 정리 1차 Meet async/await in Swift (2) | 2024.09.16 |