-
Swift - Foundation Collection & Swift CollectionProgramming/Swift 2021. 8. 28. 12:12
Array는 이전에 공부했던 Collection 프로토콜을 채용하고 있습니다.
Array를 자세히 보기전에 먼저 Swift에서 제공하는 두가지 Collection에 대해서 알아보도록 하겠습니다.
컬렉션은 Swift Collection과 Foundation Collection으로 나눌 수 있습니다.
Foundation Collection
Foundation 프레임워크에서 제공하는 Collection입니다.
대표적으로 사용하는 Foundation Collection의 종류는 다음과 같습니다.
- NSArray
- NSDictionary
- NSSet
Foundation Collection은 모두 class로 구현이 되어 있습니다.
Class 이므로 Reference Types입니다.
그리고 NSObject를 상속한 타입만 저장할 수 있으며 여러 가지 타입을 같이 저장할 수 있습니다.
(Swift에서는 NSObject를 상속하지 않은 타입을 Foundation Collection에 넣으면 자동으로 NSObject의 서브클래스로 랩핑해서 넣어줍니다. 하지만 이는 playground에서는 작동하지 않을 수 있습니다.)
Foundation Collection은 간단하게 이 정도만 공부하겠습니다.
Class, Reference Type, Object에 대해서 아직 모르셔도 괜찮습니다!
이 개념에 대해서는 다음에 자세히 포스팅하겠습니다.
Swift Colletcion
Structure로 구현이 된 Collection이 Swift Collection입니다.
Swift Collection의 종류는 다음과 같습니다.
- Array
- Dictionary
- Set
Swift Collection은 Structure이기 때문에 Value Types입니다.
그리고 NSObject를 상속하지 않는 타입도 모두 저장할 수 있습니다.
중요한 점은 한 가지 타입만을 저장할 수 있습니다.
예를 들어 Int를 저장하는 Array의 Element는 모두 Int이어야 합니다.
코드를 확인해보면 siwftArray는 Int와 String을 한 번에 저장할 수 없는것을 확인할 수 있습니다.
하지만 foundationArray는 모두 저장할수 있는것을 확인할 수 있습니다.
Mutability of Collection
Collection의 가변성은 Foundation Collection과 Swift Collection이 조금 다릅니다.
아래 코드를 보도록 하겠습니다.
상수처럼 let 키워드로 선언을 하면 Immutable Swift Collection 이 됩니다.
상수로 선언된 컬렉션은 컬렉션에 element를 추가하거나 삭제할 수 없습니다.
하지만 Foundation Collection은 let키워드가 핵심이 아니라 타입이 핵심입니다.
Immutable Foundation Collection을 선언하려면 NSArray NSSet등 기본적인 NS~~ 타입을 사용하면 됩니다.
Immutable이기 때문에 Line6, 7을 보면 array를 수정하려고하니 errorr가 나는것을 확인할 수 있습니다.
심지어 NSArray 타입에는 insert(_:at:)메서드 자체가 존재하지 않습니다.
그럼 이제 Mutable Collection을 선언하는 방법을 보겠습니다.
var 키워드로 선언하면 Mutable Swift Collection이 됩니다.
이때는 컬렉션에 element를 추가하거나 삭제할 수 있습니다.
Mutable Foundtaion Collection은 NSMutableArray, NSMutableSet등 NSMutable~~ 타입을 사용하면 됩니다.
Line11을 보시면 let으로 선언했지만 Array을 수정한 것을 확인할 수 있습니다.
Foundation Collection과 Swift Collection의 차이
Foundation Collection과 Swift Collection의 차이점을 요약해보자면
- Foundation Collection은 class Swift Collection은 structure 입니다.
- Foundation Collection은 NSObject를 상속한 타입만 저장이 가능하지만 여러가지 타입을 저장할 수 있다.
- Swift Collection은 object, value 모두 저장가능하지만 한가지 타입만 저장할 수 있다.
- 가변성은 Foundation Collection은 타입으로 Swift Collection은 var, let 키워드로 결정한다.
그럼 두 collection중에 어느것을 사용해야할까요??
두 차이를 고려해서 사용하시면 됩니다.
만약 여러 자료형을 한번에 저장해야하거나 reference type으로 사용하고 싶다면 foundation collection을 사용하면 됩니다.
그 외의 상황에서는 Swift Collection을 많이 사용합니다.
그렇기 때문에 이제부터 Collection이라고만 표기한다면 Swift Collection을 의미하는거로 생각해주세요.
그럼 다음 포스팅에서는 Collection에서 가장 많이 사용하는 Array에 대해서 공부해보도록 하겠습니다.
참고자료
https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html
728x90'Programming > Swift' 카테고리의 다른 글
Swift - Dictionary (0) 2021.10.08 Swift - Array (0) 2021.08.30 Swift - Sequence와 Collection (Sequence와 Collection의 차이) (2) 2021.08.11 Swift - CharacterSet (1) 2021.08.07 Swift - String CompareOptions (2) (0) 2021.08.05