참조
binary form
의 프레임워크를 배포할 수 있게 하는 것따라서 기존 앱 내에 존재했던 Swift 버전별 Dynamic Library가 OS의 일부로 포함 되게 되어 Swift 표준 dylib를 앱에 패키징할 필요가 없어짐
- 소스파일 대신 미리 컴파일된 프레임워크로 배포가 가능
- 외부 의존성을 프로젝트에 통합해야하는 경우, 기존보다 빌드시간이 빨라질 수 있음
- 아마도 앱 용량도 줄어들겠져 ?
참조
https://achievers.engineering/data-structures-and-algorithms-in-swift-arrays-c4ed2b44d238
간단하게만 살펴보았습니다. 위 글 맨 아래 문단
이 둘은 동일하지 않습니다. Swift의 배열은 값 유형이므로 전달될 때 복사되는 반면 Objective-C 배열은 참조 유형이므로 복사되지 않고, 개체에 대한 참조가 전달됩니다.
여기서 알아둬야 하는 점은 Swift 배열은 Copy-on-Write
라는 부분입니다. 이는 초기에는 참조만 전달이되어 값이 공유가 된다는 점입니다. 하지만 값의 변경이 일어난다면 원래 값을 수정하는 대신 복사본이 만들어지고 수정을 위해 전달됩니다.
또 차이점으로, Swift에는 배열 클래스가 없다는 부분입니다. 일반적으로 구조체를 사용하고 있습니다. 반대로 Objective-C에서는 클래스로 구현되어 있어서 배열이 가변인지 불변인지를 나타내는 별도의 클래스가 있습니다. 따라서 Swift에서 배열을 다루는 것은 Objective-C보다 훨씬 쉽습니다.
참조
https://sihyungyou.github.io/iOS-hash-collision-swift/
딕셔너리의 내부 접근 시간 복잡도는 평균적으로 O(1)이나 해쉬 충돌이 일어나는 경우 최악에는 O(N)이다.
해쉬 충돌이란 서로 다른 두 입력 값(키 값으로 생각하면 됩니다)에 대해, 동일한 출력값을 내는 상황을 의미합니다.
이런 경우를 방지하기 위해 방법들이 있는데, 간단히 살펴보겠슴다.
첫 번째 방법으로는, 충돌이 일어난 경우에, 연결리스트를 이용하여 데이터를 추가로 뒤에 연결 시켜서 저장하는 체이닝 기법이 존재합니다.
두 번째 방법으로는, 충돌이 난 부분 다음 데이터로 아래로 순회하여, 빈 공간에 충돌이 일어난 데이터를 삽입하는 방법입니다. 이는 Linear Probing
기법이라고 합니다.
생각을 조금 해보면 결국 이러한 예외들이 존재하기 때문에 해쉬 테이블을 사용한 딕셔너리의 접근 시간 복잡도의 최악은 O(N)
이라는 것을 알 수 있었습니다 !
추가로 위 참조한 링크의 글에서 Swift는 Linear Probing
기법을 사용하여 해쉬충돌을 해결한다고 한다.
Hashable
에서 ==
을 구현해야 하는 이유도, 위와 연관지어서 추론하여 해쉬 충돌이 일어난 경우에, 해쉬값으로 비교하는게 아닌 다른요소로 동등성을 검사하여서 올바른 값을 출력하기 위해서 임을 알 수 있다
확실히 추론 잘하신다~
이번에는 여러 잡다한 부분들을 알아보았슴니다. 해쉬 충돌이나, 앱 용량에 관한 부분이 좀 인상깊었슴다~