배열 자료형의 몇가지 특징
- 배열에 저장할 아이템의 타입에는 제약이 없지만, 하나의 배열에 저장하는 아이템 타입은 모두 같아야함
- 선언 시 배열에 저장할 아이템 타입을 명확히 정의해야 함
- 배열의 크기는 동적으로 확장할 수 있음
배열에 동적으로 아이템을 추가할 때에는 메소드를 사용하는데, 기능에 따라 다양한 메소드가 있지만 대표적인 것으로 아래 세가지 정도를 사용한다.
- append(_:)
- insert(_:at:)
- append(contentsOf:)
append(_:) 메소드는 입력된 값을 배열의 맨 뒤에 추가합니다. 일반적으로 배열에서 존재하지 않는 인덱스에 접근하면 오류가 발생하므로 이 메소드는 아이템 추가 전에 먼저 배열의 크기를 +1만큼 확장하여 인덱스 공간을 확보한 후, 인자값을 마지막 인덱스 위치에 추가합니다.
반면 insert(_:at:) 메소드는 아이템을 배열의 맨 뒤가 아닌 원하는 위치에 직접 추가하고 싶을 때 사용합니다. at: 뒤에 입력되는 정수값은 배열에서 아이템이 추가될 인덱스의 위치를 의미합니다. 이 인덱스에 새로운 값이 추가되면 이를 기준으로 하여 나머지 인덱스들은 하나씩 다음으로 밀려나는 결과를 가져옵니다. 쉽게 말해 끼어들기 입니다.
마지막으로 append(contentsOf:)는 append(_:) 메소드처럼 배열의 맨 마지막에 아이템을 추가하지만, 개별 아이템이 아니라 여러 개의 아이템을 배열에 한꺼번에 추가할 때 사용하는 메소드 입니다. 이를 위해 메소드의 인자값은 항상 배열이어야 합니다.
이들 메소드를 이용하여 배열 아이템을 동적으로 추가해 봅시다.
집합
스위프트에서 제공하는 모든 기본 타입은 기본적으로 해시 연산을 할 수 있으므로 집합의 아이템으로 사용하기에 문제가 없습니다. 만약 스위프트에서 기본으로 제공하는 타입이 아니라 우리가 임의로 만든 타입을 사용하여 집합의 아이템으로 저장하려면, 스위프트 표준 라이브러리에서 제공하는 Hashable 프로토콜을 구현해야 합니다. 포로토콜을 구현한다는 의미를 지금 이해하기는 어려우므로 단지 hashValue라고 불리는 해시값을 만들어 낼 수 있는 기능을 정의해야 한다는 정도로만 이해하도록 합시다.
기본 집합 연산
집합 자료형은 우리가 수학에서 배웠던 집합의 개념과 거의 동일합니다. 이 때문에 집합 자료형끼리는 집합 연산이 가능합니다. 스위프트에서는 집합끼리의 연산을 쉽게 처리할 수 있도록 여러 메서드를 제공합니다.
intersection(_:)
수학에서의 교집합입니다. 양쪽 집합에서 공통되는 아이템만 선택하여 새로운 집합을 만들어 주는 메서드입니다
symmetricDifference(_:)
교집합의 여집합입니다. 양쪽 집합에서 공통되는 교집합을 제외하고 한쪽에만 포함된 아이템을 집합으로
만들어주는 메서드입니다
union(_:)
수학에서의 합집합입니다. 양쪽 집합에 있는 아이템을 선택하여 새로운 집합을 만들어 주는 메서드입니다
subtract(_:)
수학에서의 차집합입니다. 한쪽 집합에 있는 모든 아이템에서 다른 쪽 집합에도 속하는 공통 아이템을 제외하고
새로운 집합을 만들어주는 메서드입니다. 주로 한쪽 집합에서 다른 쪽 집합을 빼는 연산으로 처리됩니다
'iOS (스파르타) > Swift 문법' 카테고리의 다른 글
Generic (제네릭) 알아보기 (0) | 2024.08.25 |
---|---|
소수점 원하는 만큼 출력 (0) | 2024.08.22 |
문법 심화 - RxSwift 맛보기 (1) | 2024.06.12 |
문법 심화 - Combine 맛보기 (0) | 2024.06.12 |
문법 심화 - 비동기와 네트워킹 (0) | 2024.06.12 |