Collection
isKnownUniquelyReferenced
Collection
는 프로토콜이다. 심지어, 많은 빌트인 자료형에 쓰이고 있다.Collection
프로토콜의 기능은, 데이터 모음의 특정 위치에 있는 원소에 접근할 수 있다는 것이며, 해당 데이터 모음의 일부분에 대해서도 이 성질이 유지된다는 것이다.Index
에 관련된 기능을 한다고 생각하면 편하다.LinkedList<Value>
구조체가 의존하는 Node<Value>
가 클래스였기 때문에, 리스트의 '복사' 개념을 구현해주기 위해 사용되었다. 두 개의 리스트를 생성해도, 노드들이 서로 같은 곳을 참조하고 있기 때문에, 하나의 값을 바꾸면 두 개가 다 바뀌는 현상이 일어났다.isKnownUniquelyReferenced
는 Collections
와 관련된 메서드이다. 아까 위에서 말헀던 '데이터 모음' 관련된 메서드.True
를 반환하는 메서드이다.false
를 반환한다는 뜻이다.isKnownUniquelyReferenced
를 적용하지 않은 상태에서는 값을 더하거나 뺄 때마다 리스트 전체를 복사해야 한다. 모든 리스트의 메서드에 대해 O(n)만큼의 시간이 걸리게 되는 것이다. 무서움!True
를 반환할 수 있다고 한다. 이것은 이제 비동기에서 Race Condition이 일어나는 과정이나, 이런 것들이랑 연관이 있으리라 생각된다.https://developer.apple.com/documentation/swift/collection (Collection 프로토콜)
https://www.hackingwithswift.com/example-code/language/what-is-copy-on-write (Copy On Write)
https://developer.apple.com/documentation/swift/2429905-isknownuniquelyreferenced (isKnownUniquelyReferenced
)