Swift 다수의 데이터 다루기


  1. 다수의 데이터를 다루는 클래스 : 배열, 딕셔너리, 셋, 튜플
  2. 다수의 데이터를 가변형과 불가변형으로 정의하는 방법
    1. 다수의 데이터를 다루는 클래스를 선언할 때 var 로 선언 시 가변형으로 선언 후에 내용 수정을 할 수 있다.
    2. 다수의 데이터를 다루는 클래스를 선언할 때 let 으로 선언 시 불가변형으로 선언 후에 내용 수정을 할 수 없다.
  3. 배열 : 인덱스 기반의 다수의 데이터를 다루는 클래스
    1. 타입 선언 : Array<Element>, [Element]
    2. 생성 방법
      1. 타입을 선언하여 생성 : var intArray : [int] = [1, 2, 3, 4, 5]
      2. 타입을 선언하지 않고 생성
        1. var strArray = ["A", "B", "C"]
        2. let floatArray = Array<Float>([1.1, 2.2, 3.3])
      3. 공백 배열을 생성 (반드시 타입 선언이 필요)
        1. var emptyArray1 = [int]()
        2. var emptyArray2 = Array<Double>()
        3. var emptyArray3 : [String] = []
    3. 배열에 데이터를 추가하는 방법
      1. append 함수를 이용
        1. append 함수를 이용하면 추가하려는 데이터는 가장 마지막에 추가된다.
        2. 사용방법
          append 함수 사용법
          var intArray : [int] = [1, 2, 3]
          intArray.append(4) // [1, 2, 3, 4]
      2. insert 함수를 이용
        1. insert 함수를 이용하면 추가하려는 데이터를 특정 인덱스에 추가된다.
        2. 사용방법
          insert 함수 사용법
          var intArray : [int] = [1, 2, 3, 5]
          intArray.insert(4, at:3) // [1, 2, 3, 4, 5]
      3. + 연산자를 이용
        1. + 연산자를 이용하면 추가하려는 데이터는 가장 마지막에 추가된다.
        2. 사용방법
          + 연산자 사용법
          var intArray : [int] = [1, 2, 3]
          intArray += [4, 5] // [1, 2, 3, 4, 5]
    4. 배열에서 데이터를 제거하는 방법
      1. remove 함수를 이용
        1. remove 함수를 이용하면 특정 인덱스의 데이터가 제거된다.
        2. 사용방법
          remove 함수 사용법
          var intArray : [int] = [1, 2, 3]
          intArray.remove(at:2) // [1, 2]
      2. removeFirst 함수를 이용
        1. removeFirst 함수를 이용하면 첫번째 데이터가 제거, 첫번째부터 n개의 데이터가 제거된다.
        2. 사용방법
          removeFirst 함수 사용법
          var intArray : [int] = [1, 2, 3, 4, 5]
          intArray.removeFirst() // [2, 3, 4, 5]
          intArray.removeFirst(2) // [4, 5]
      3. removeLast 함수를 이용
        1. removeLast 함수를 이용하면 마지막 데이터가 제거, 마지막부터 n개의 데이터가 제거된다.
        2. 사용방법
          removeLast 함수 사용법
          var intArray : [int] = [1, 2, 3, 4, 5]
          intArray.removeLast() // [1, 2, 3, 4]
          intArray.removeLast(2) // [1, 2]
    5. 배열에서 데이터를 수정하는 방법
      1. 첨자를 이용
        1. 첨자를 이용하면 특정 인덱스의 데이터가 수정된다.
        2. 사용방법
          첨자를 이용한 사용법
          var intArray : [int] = [1, 2, 3, 4, 5]
          intArray[2] = 7 // [1, 2, 7, 4, 5]
      2. 범위를 이용
        1. 범위를 이용하면 특정 인덱스 범위의 데이터가 수정된다.
        2. 사용방법
          범위를 이용한 사용법
          var intArray : [int] = [1, 2, 3, 4, 5]
          intArray[1..2] = [3, 6, 9] // [1, 3, 6, 9, 4, 5]
    6. 배열에서 자주 접하는 에러
      1. 범위 에러
        1. 배열은 인덱스 기반으로 다수의 데이터를 다루는 클래스로 인덱스 범위에 주의해야한다. (인덱스는 0부터 시작하고 생성한 데이터의 개수 - 1이 인덱스 범위)
      2. let 배열에 데이터 추가
        1. let 으로 선언한 배열은 불가변형으로 해당 배열에 데이터를 넣거나 삭제할 수 없다.
      3. 타입 에러
        1. 배열을 Int 형으로 선언 후에 Int 이외에 다른 타입의 데이터를 넣지 않도록 주의해야한다.
  4. 딕셔너리 : 키 - 값 방식으로 다수의 데이터를 다루는 클래스
    1. 타입선언 : Dictionary<Key, Value>, [Key, Value]
    2. 생성방법
      1. 타입을 선언하여 생성
        1. var dic1 : Dictionary<int, String> = [1 : "One", 2 : "Two"]
        2. var dic2 : [String : Int] = ["일" : 1, "이" : 2]
      2. 타입을 선언하지 않고 생성
        1. var dic1 = ["1월" : "January", "2월" : "February"] (키 : String - 값 : String)
      3. 공백 딕셔너리를 생성 (반드시 타입 선언이 필요)
        1. var emptyDic1 = [int : int]()
        2. var emptyDic2 : Dictionary<Int : String> = []
        3. var emptyDic3 : [String : Int] = []
    3. 딕셔너리에서 데이터를 추가하는 방법
      1. 딕셔너리에 저장된 키 이외 새로운 키로 값을 설정
        1. 새로운 키로 값을 설정하면 딕셔너리에 데이터가 추가된다.
        2. 사용방법
          새로운 키로 값 설정
          var dic1 : Dictionary<String, String> = ["1월" : "January", "2월" : "February"]
          dic1["3월"] = "March"
          // ["1월" : "January", "2월" : "February", "3월" : "March"]
    4. 딕셔너리에서 데이터를 삭제하는 방법
      1. removeValue(forKey:) 함수를 이용
        1. removeValue(forKey:) 함수를 이용하면 해당 키의 데이터가 제거된다.
        2. 사용방법
          removeValue(forKey:) 함수 사용법
          var dic1 : Dictionary<String, String> = ["1월" : "January", "2월" : "February"]
          dic1.removeValue(forKey:"2월") // ["1월" : "January"]
    5. 딕셔너리에서 데이터를 수정하는 방법
      1. updateValue(_, forKey:) 함수를 이용
        1. updateValue(_, forKey:) 함수를 이용하면 해당 키의 데이터가 수정된다.
        2. 사용방법
          updateValue(forKey:) 함수 사용법
          var dic1 : Dictionary<String, String> = ["1월" : "January", "2월" : "February"]
          dic1.updateValue("추운 달", forKey:"1월")
          // ["1월" : "추운 달", "2월" : "February"]
      2. 첨자를 이용한 수정
        1. 첨자를 이용하면 첨자 내의 키에 해당하는 데이터가 수정된다.
        2. 사용방법
          첨자를 이용한 사용법
          var dic1 : Dictionary<String, String> = ["1월" : "January", "2월" : "February"]
          dic1["2월"] = "졸업 시즌"
          // ["1월" : "January", "2월" : "졸업 시즌"]
    6. 딕셔너리에서 자주 접하는 에러
      1. 타입 에러
        1. 생성된 딕셔너리의 키 또는 값의 타입을 반드시 맞추도록 해야한다.
  5. 셋 : 배열과 동일하게 인덱스 기반의 다수의 데이터를 다루는 클래스로 중복을 허용하지 않는다.
    1. 타입 선언 : Set<Element>
    2. 생성방법
      1. 타입을 선언하여 생성 : var set : Set<String>
      2. 타입을 선언하지 않으면 배열로 선언이 되므로 반드시 위의 방법으로 생성한다.
    3. 셋에서 데이터를 추가하는 방법
      1. insert(_:) 함수를 이용
        1. insert(_:) 함수를 이용하면 추가하려는 데이터가 셋 내에 없는 경우 추가된다.
        2. 사용방법
          insert(_:) 함수 사용법
          var set1 : Set<String> = ["Coke", "Juice", "Milk"]
          set1.insert("Soda") //["Coke", "Juice", "Milk", "Soda"]
    4. 셋에서 데이터를 삭제하는 방법
      1. remove(_:) 함수를 이용
        1. remove(_:) 함수를 이용하면 제거하려는 데이터가 셋 내에 있는 경우 삭제된다.
        2. 사용방법
          remove(_:)함수 사용법
          var set1 : Set<String> = ["Coke", "Juice", "Milk"]
          set1.remove("Milk") //["Coke", "Juice", "Soda"]
    5. 셋에서는 데이터를 수정하는 방법은 없으며, 동일 데이터 추가 시 기존 데이터를 덮어써서 중복을 없앤다.
    6. 셋에서는 배열, 딕셔너리와 다르게 집합 연산이 가능하다.
      1. 교집합 : intersection
        1. 교집합은 아래 그림과 같이 두 집합의 공통 부분을 가져온다.
        2. 사용방법
          intersection()함수 사용법
          var set1 : Set<Int> = [1, 2, 3]
          var set2 : Set<Int> = [2, 3, 4]

          let set3 = set1.intersection(set2) //  [2, 3]
      2. 합집합 : union
        1. 합집합은 아래 그림과 같이 두 집합의 모든 데이터를 중복을 제거하여 가져온다.
        2. 사용방법
          union()함수 사용법
          var set1 : Set<Int> = [1, 2, 3]
          var set2 : Set<Int> = [2, 3, 4]

          let set3 = set1.union(set2) //  [2, 3, 1, 4]
      3. 차집합 : subtracting
        1. 차집합은 아래 그림과 같이 두 집합 중 공통 부분을 제외한 부분집합을 가져온다.
        2. 사용방법
          subtracting()함수 사용법
          var set1 : Set<Int> = [1, 2, 3]
          var set2 : Set<Int> = [2, 3, 4]

          let set3 = set1.subtracting(set2) //  [1]
  6. 튜플 : 값 또는 키 - 값으로 다수의 데이터를 다루는 클래스
    1. 타입 선언 : 별도의 타입 선언이 없다.
    2. 생성방법
      1. 값을 이용한 생성 : var tuple = (1, "One", "일")
      2. 키 - 값을 이용한 생성 : var tuple = (num : 2, eng : "two", kor : "둘")
    3. 튜플에서 데이터를 수정하는 방법
      1. 값으로 다수의 데이터를 넣은 경우 인덱스를 이용
        1. 값만으로 다수의 데이터를 넣은 경우는 인덱스가 부여되어 특정 인덱스의 데이터가 수정된다.
        2. 사용방법
          인덱스를 이용한 사용법
          var tuple = (1, "One", "일")
          var tuple.1 = "Two" //(1, "Two", "일")
      2. 키-값으로 다수의 데이터를 넣은 경우 키 값을 이용
        1. 키-값으로 다수의 데이터를 넣은 경우는 키 값에 해당하는 데이터가 수정된다.
        2. 사용방법
          키를 이용한 사용법
          var tuple = (num : 1, eng : "One", kor : "일")
          var tuple.num = 2 //(2, "One", "일")
    4. 튜플에서 자주 접하는 에러
      1. 접근에러
        1. 값을 이용해서 생성한 데이터의 개수를 넘지 않도록 해야한다.
        2. 키-값을 이용해서 생성한 데이터에 정의된 키 값으로만 접근해야한다.
    5. 튜플의 경우 튜플 내에 여러 데이터 타입을 모두 넣을 수 있는 장점이 있지만, 내부에 어떤 타입의 데이터가 있는지 모르기 때문에 다수 데이터를 다룰 때 주로 사용되지는 않는다.