ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Swift - Foundation Collection & Swift Collection
    Programming/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의 차이점을 요약해보자면

    1. Foundation Collection은 class Swift Collection은 structure 입니다.
    2. Foundation Collection은 NSObject를 상속한 타입만 저장이 가능하지만 여러가지 타입을 저장할 수 있다.
    3. Swift Collection은 object, value 모두 저장가능하지만 한가지 타입만 저장할 수 있다.
    4. 가변성은 Foundation Collection은 타입으로 Swift Collection은 var, let 키워드로 결정한다.

     

    그럼 두 collection중에 어느것을 사용해야할까요??

     

    두 차이를 고려해서 사용하시면 됩니다.

    만약 여러 자료형을 한번에 저장해야하거나 reference type으로 사용하고 싶다면 foundation collection을 사용하면 됩니다.

    그 외의 상황에서는 Swift Collection을 많이 사용합니다.

    그렇기 때문에 이제부터 Collection이라고만 표기한다면 Swift Collection을 의미하는거로 생각해주세요.

     

    그럼 다음 포스팅에서는 Collection에서 가장 많이 사용하는 Array에 대해서 공부해보도록 하겠습니다.

     

     


     

    참고자료

     

    https://kxcoding.com

     

    여러분의 새로운 도전을 응원합니다 | KxCoding

    Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기

    kxcoding.com

     

     

    https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html

     

    Collection Types — The Swift Programming Language (Swift 5.6)

    Collection Types Swift provides three primary collection types, known as arrays, sets, and dictionaries, for storing collections of values. Arrays are ordered collections of values. Sets are unordered collections of unique values. Dictionaries are unordere

    docs.swift.org

     

     

     

    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
Designed by Tistory.