[Swift5] Collection Types 1
- 다음은 Swift 5.6 Doc의 Collection Types 공부 내용을 정리했음을 밝힙니다.
Collection Types
스위프트는 배열, 집합, 딕셔너리 세 개의 주요 컬렉션 타입을 지원한다. 값을 순서대로 접근 가능한 배열, 값(중복 값이 없음)을 순서 없이 모아놓은 집합, 키 값으로 값에 접근 가능한 딕셔너리를 통해 값을 저장, 반환할 수 있다.
컬렉션의 mutability
컬렉션 타입으로 값을 저장할 때 이 컬렉션은 mutable, 즉 값이 변할 수 있다. 값을 추가하거나, 삭제하거나, 바꾼 이후에도 여전히 값을 바꿀 수 있다는 말이다. 반면, 만일 컬렉션 타입을 상수로 할당한다면 immutable해지므로 크기나 내용은 바꿀 수 없다.
immutable한 컬렉션은 그렇다면 소용이 없을까? 어떤 종류의 값을 사용하는지에 따라 달라진다. 이후 값을 고정적으로 사용하는 값이라면 상수로 설정하자. 스위프트 컴파일러 최적화 지원을 통해 더 높은 성능을 얻을 수 있다.
배열
배열은 같은 타입의 데이터를 순서대로 저장한다. 이때 데이터는 같은 값, 즉 중복이어도 상관없다.
단축어
특정 타입의 배열을 선언하려면 Array<Element>
로 작성해야 하지만 스위프트는 [Element]
라는, 타입을 대괄호로 둘러싼 형태로도 배열이라 인식한다.
빈 배열 생성
var array_int: [Int] = []
을 통해 빈 배열을 선언할 수 있다. 이처럼 [Int]
이라는 정보를 주지 않아도 문맥 상 함수 파라미터 등으로 추론 가능한 정보를 통해 빈 배열을 선언할 수 있다.
array_int.append(3)
array_int = []
위 경우 array_int
는 정수 데이터 타입의 배열임을 빈 배열을 주기 전에 알 수 있었다.
디폴트 값으로 배열 생성
동일한 디폴트 값을 배열에 주면서 선언할 수 있다. 어떤 디폴트 값(repeating
)을 몇 번(count
) 넣을 건지 알려주기만 하면 된다.
var array_default = Array(repeating: 3, count: 6)
// array_default: [3, 3, 3, 3, 3, 3]
배열 합치기
배열 두 개를 합쳐 새로운 배열을 만들 수 있다.
var array_int1 = Array(repeating: 3, count: 3)
var array_int2 = Array(repeating: 4, count: 2)
var array_int3 = array_int1 + array+int2
// array_int3: [3, 3, 3, 4, 4]
리터럴로 배열 생성
직접 리터럴로 값을 줄 수도 있다. ,
콤마로 값을 구분하고 []
안에 값을 넣자.
var array_literal: [String] = ["Hello", "Swift"]
이때 array_lieteral
은 String 타입만 받아들이는 배열로 선언되었고, 리터럴로 넣어준 값을 통해 초기화된다.
배열 접근 및 수정
배열 메소드와 프로퍼티를 통해 값에 접근하거나 수정하자.
-
Array.isEmpty
프로퍼티는 배열이 비었는지 확인한다. 비었다면True
, 값이 있으면False
를 return -
Array.append()
또는+=
연산자를 통해 값을 추가할 수도 있다.
var array_str:[String] = ["Hello"]
array_str.append("Swift")
// array_str: ["Hello", "Swift"]
array_str += ["This", "is", "Example"]
// array_str: ["Hello", "Swift", "This", "is", "Example"]
- 서브스크립트(인스턴스에 대괄호
[]
를 통해 접근)를 통해 값을 꺼내올 수 있다.
let first_item = array_str[0]
// first_item: "Hello"
- 서브스크립트를 통해 값을 바꿀 수도 있다.
array_str[1] = "Python"
// array_str: ["Hello", "Python", "This", "is", "Example"]
서브스크립트 문법을 사용할 때에는 지금 접근하는 인덱스가 과연 이 인스턴스에서 유효한지 확인하자. 넣어주는(바꿔주는) 값도 이 인스턴스 타입과 맞는지 확인해야 한다.
- 서브스크립트를 통해 특정 범위 값에 접근할 수 있다.
array_str[2...4] = ["New", "String"]
// array_str: ["Hello", "Python", "New", "String"]
이때 주어지는 범위 [...]
에 이 범위보다 더 많거나 적은 수의 값을 넘기더라도 허용된다.
Array.insert(at: )
메소드를 통해 특정 인덱스에 값을 넣어줄 수 있다.
array_str.insert("The", at: 2)
// array_str: ["Hello", "Python", "The", "New", "String"]
삽입한 인덱스 바로 그곳에 값이 들어가며, 나머지 값이 있다면 자동으로 뒤로 밀린다.
Array.remove(at: )
메소드를 통해 특정 인덱스 값을 삭제할 수 있다.
array_str.remove(at: 1)
// array_str: ["Hello", "The", "New", "String"]
이때 remove
메소드는 값을 배열에서 삭제하면서 반환하는데, 파이썬의 pop()과 같다. Array.removeLast()
메소드는 이때 배열의 마지막 값만 배열에서 삭제하고 반환한다.
스위프트가 지원하는 인덱스는 제로 베이스이기 때문에 1부터가 아니라 0부터 시작한다는 데 주의하자. 따라서
Array.count
프로퍼티로 확인한 배열의 총 길이n
이 있다면 이 배열의 마지막 인덱스n-1
이다.
반복문으로 접근하기
- for-in 루프문을 통해 배열 값에 순서대로 접근할 수 있다.
for item in array_str {
print(item)
}
// Hello
// The
// New
// String
- 특정 값이 어떤 인덱스를 가지는지
enumerated()
메소드를 통해 확인할 수 있다.
for (idx, val) in array_str.enumerated() {
print("Item \(idx + 1): \(val)")
}
// Item 1: Hello
// Item 2: The
// Item 3: New
// Item 4: String
enumerated()
를 통해 가져온 인덱스 역시 0부터 시작한다는 데 주의하자.
Author And Source
이 문제에 관하여([Swift5] Collection Types 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@j_aion/Swift5-Collection-Types-1저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)