본문 바로가기

Swift13

Task Group 문제점 Swift Concurrency를 사용하다가 보면 이런 문제를 마주할 수 있다. API가 많아졌을 때, 이를 한번에 호출하기가 쉽지 않다. 예를 들어 Home View를 구성하는데 세개의 View Component가 있고, 이 Component안의 데이터를 채우기 위해서는 세개의 API를 call해야한다고 가정을 해보자. 이 때 무지성으로 task안에 await를 하나씩 하나씩 넣으면 매우 비효율적인 모습이 되게된다. Why? Task안의 코드들은 마치 동기 코드인것 마냥 진행이된다. 따라서, getAData가 끝나지 않는다면 getCData는 실행되지 않는다. A, B, C의 데이터는 각각이 독립적이어서 어떤 것이 먼저 실행되든 상관이 없음에도 불구하고, getAData()가 끝나지 않으면 그.. 2023. 1. 14.
Swift Concurrency 알아보기 Swift Programming Language를 해석하여 Swift Concurrency에 대해서 알아보자. 자세한 내용은 위 링크를 참고하시면 좋겠다. Swift Concurrency 우리는 UI업데이트나 무거운 작업을 하기 위해서 비동기 / 병렬 실행 코드를 작성하곤 한다. 하지만.. 이런 병렬 또는 비동기 코드는 많아지면 질수록 관리에 많은 어려움을 겪는다. 또한, 느리거나 버그가 많은 코드에 동시성을 추가한다고 해서 그것이 빨라지거나 정확해진다는 보장은 없을 뿐더러 최악의 경우엔 디버깅만 어려워 질 수 있다. 이를 어떻게 Swift에서는 해결하려 했는지 확인해 보자. Without Swift Concurrency Swift Concurrency 언어 지원을 사용하지 않고 비동기 코드를 작성해보.. 2023. 1. 8.
클래스의 초기화 iOS 개발을 하다보면 한번 쯤은 밑과 같은 코드를 사용한다. 클래스에서 이니셜라이저를 override(재정의)하는 코드인데 super.~~~를 쓰지 않으면 에러가 나는 경우가 많았다. 하지만.. 어떤경우에는 super.~~~코드를 빼도 컴파일 에러가 나지 않는 경우도 있었다. 그 이유 에 대해 알아보기 위해 Swift에서 클래스의 초기화가 어떤 방식으로 이루어 지는지 알아보았다. override init() { self.property = "property" super.init() } 클래스 초기화 Swift에서 클래스들의 초기화는 크게 2단계를 거친다. 클래스에 정의한 각각의 저장 프로퍼티에 초깃값이 할당됨. 새로운 인스턴스의 사용이 준비됐다고 알려주기 전에 저장프로퍼티들을 커스터마이징 할 수 있는.. 2022. 8. 7.
DiffableDataSource 알아보기. DiffableDataSource 얘는 대체 뭘까? The object you use to manage data and provide cells for a collection view. - 애플 TableView 혹은 CollectionView의 데이터를 관리하고 cell을 제공하기 위한 object. 근데 이미 우리는 dataSource를 사용하고 있지 않나? 이 친구는 어째서 나오게 된걸까? 탄생 배경 애플의 표현에 따르면 단하나의 Truth Data를 가질 수 있게 하기 위해서라고 한다. Truth Data가 뭔데?? 우리가 일반적인 DataSource를 이용해서 CollectionView를 구현할 때를 살펴보자. DataSource에 있는 함수들을 이용해서 우리는 View를 그리게 된다. 이 함수.. 2022. 7. 25.