값을 할당하지 않은 빈 배열을 선언하고 초기화할 때는 두 가지 형식을 사용할 수 있다
첫 번째 형식
Array <데이터 타입> ()
📝 < > 기호를 사용하여 배열 내부에서 사용할 데이터 타입을 지정하는 문법을 제너릭(Generic)이라고 한다.
스위프트에서 배열을 정의하는 객체는 Array다.
구조체로 정의된 이 객체는 실질적인 배열 데이터를 만드는 데 사용될 뿐만 아니라 배열에서 데이터를 효과적으로 다루기 위한 다양한 기능까지 제공해 준다.
스위프트에서 배열을 정의할 때에는 반드시 저장할 데이터의 타입도 함께 명시해 주어야 한다. 컴파일러는 이때 입력받은 아이템 타입을 이용하여 다른 데이터 타입이 입력되었을 경우 잘못 입력되었음을 판단할 뿐만 아니라, 배열 내부의 데이터를 바로 데이터 타입 형태로 사용할 수 있도록 처리해 준다.
동적으로 배열을 정의할 때에는 선언과 초기화 과정이 차례로 필요하다.
선언(Declare)은 "나 이러이러한 배열 만들 거야"라고 컴파일러에 미리 알려주는 역할을 하고, 초기화(initialization)는 "앞에 선언한 대로 실제로 만들어줘"라고 요청하는 과정이다.
// 문자열 배열의 선언 및 초기화
var city = Array<String>()
// 문자열 배열을 선언
var city : Array<String>
// 배열의 초기화
city = Array()
스위프트에서 배열은 Array <데이터 타입>으로 정의한다.
이 방식은 다른 프로그래밍 언어와는 다소 형식에서 차이가 있는데, 일반적으로 프로그래밍 언어에서 배열을 선언할 때에는 자료형 뒤에 [ ] 기호를 붙이는 방법을 많이 사용한다.
📝 String [], Integer [], Double [], MyClass [] 이런 식으로 사용하지🙂
두 번째 형식
[ 데이터 타입 ]()
이 구문은 대괄호 [ ] 사이에 데이터 타입을 작성하는 형식으로 배열을 정의한다.
이때에는 앞에서 사용했던 배열 구조체 Array나 데이터 타입을 표현하는 <> 기호가 사용되지 않으며 단순히 대괄호 사이에 데이터 타입을 기재하는 것만으로 배열을 정의할 수 있다. 물론 초기화할 때는 초기화 연산자인 ()를 붙여야 한다.
// 배열 선언 및 초기화
var city = [String]()
// 배열 선언
var city : [String]
선언된 배열을 초기화할 때에는 아래와 같이 두 가지 형식을 사용할 수 있는데, 이때 두 가지 형식이 의미하는 바는 전혀 다르므로 주의해야 한다.
// 배열 초기화 - 첫 번째 방식
city = [Stirng]()
// 배열 초기화 - 두 번째 방식
city = []
첫 번째 형식은 선언된 배열 그대로를 초기화하지만, 두 번째 형식은 빈 배열 하나를 새로 만들어서 이것을 변수에 할당한다. 엄밀히 말하자면 두 번째 방식은 초기화가 아니다. 따라서 초기화 연산자인 ()가 붙지 않을뿐더러 초기화 연산자 ()를 붙이면 오히려 오류가 발생한다.
이처럼 배열의 선언과 초기화 스타일은 매우 다양하다.
필요에 따라서 선언과 초기화 표현을 서로 섞어서 사용해도 무방하다.
📝 어느 방식이 옳다는 것이 없어 각자 익숙한 형태를 골라쓰면 된다 😆
추가
선언된 배열이 실제로 비어 있는지를 체크해야 할 경우가 있다.
이때에는 흔히들 배열의 길이 속성인 count의 값이 0이냐 아니냐를 기준으로 하기도 하지만, 그보다는 배열 구조체에서 제공하는 속성인 *isEmpty를 사용하는 것이 좋다.
📝 isEmpty란?
배열에 아이템이 없는 텅 빈 상태이면 true를, 그렇지 않으면 false를 반환해 주는 역할을 한다
// 예시 코드
var list = [String]()
if list.isEmpty {
print("비어있는 상태")
} else {
print("\(list.count) 개의 데이터가 저장되어 있음")
}
이 속성은 읽기 전용(Read-Only) 이므로 isEmpty 속성에 true를 대입할 수 없다.
강제로 대입한다 해도 이로 인해 배열이 비워지지 않는다는 것을 알아두자.
'메모장' 카테고리의 다른 글
Swift 범위 연산자를 이용한 인덱스 참조 (1) | 2023.03.20 |
---|---|
Swift 배열 데이터 동적 추가 (1) | 2023.03.16 |
Swift 배열 순회 탐색 (3) | 2023.03.14 |
Swift 배열 (4) | 2023.03.13 |
Swift 조건문 3 (3) | 2023.03.09 |