[Swift 문법] 집단 자료형 - 배열(Array)

Yellowtoast·2023년 2월 15일
0

Swift

목록 보기
4/11
post-thumbnail

해당 글은 [ 꼼꼼한 재은씨의 Swift : 문법편 ] 을 읽고 배운 내용을 정리한 글입니다.

집단 자료형

스위프트에서 제공하는 집단 자료형은 크게 4가지입니다.

  • 배열(Array)
  • 집합(Set)
  • 튜플(Tuple)
  • 딕셔너리(Dictionary)

배열(Array)

정적 변수 선언

var cities = ["Seoul", "New York", "LA]

배열의 길이는 cities.count로 접근합니다.

배열 순회 탐색

var cities = ["Seoul", "New York", "LA", "Santiago"]
// 배열값의 순회 특성을 사용하여 탐색

for row in cities {
	print("배열 원소는 \(row) 입니다")
}

[실행 결과]
배열 원소는 Seoul 입니다
배열 원소는 New York입니다
배열 원소는 LA입니다
배열 원소는 Santiago입니다

동적 선언과 초기화

//배열을 선언하고 동시에 초기화하므로 바로 사용 가능
var cities = Array<String>()
//문자열 배열을 선언만 함, 해당 경우 사용하기 위해서는 따로 초기화 필요
var cities = Array<String>

cities = Array()
//배열을 선언하고 동시에 초기화하는 또다른 방법
var cities = [String]()

배열 아이템의 동적 추가

var cities = [String]() // []
cities.append ("Seoul")// ["Seoul"]
cities.append ("New York") // ["Seoul", "New York"1 cities. insert("Tokyo", at: 1) // ["Seoul", "Tokyo", "New York"] 
cities.append (contentsOf: ["Dubai", "Sydney"]) // ["Seoul", "Tokyo", "NewYork", "Dubai", "Sydney"]

배열의 index에 값을 바로 넣을때 주의사항

배열의 인덱스에 직접 접근하려면 접근할 인덱스 공간이 미리 만들어져 있어야 합니다. 지금까지 우리는 배열을 만들 때 배열에 들어갈 아이템의 개수, 즉 배열의 길이를 그다지 고려하지 않았습니다.

처음에 시작할 때 크기를 0으로 지정한 후 입력 메소드를 사용하여 새로운 아이템을 추가할 때마다 동적으로 크기가 늘어나도록 배열을 사용했죠.

배열의 길이가 늘어나면 그만큼 인덱스도 자동으로 늘어나는 것이 스위프트에서 배열의 특징입니다.

var cities = Array(repeating: "None", count: 3)
//Array 구조체는 [] 기호로 대체할 수 있으므로, 위 구문을 다음과 같이 바꾸어도 됩니다.
var cities = [String] (repeating: "None", count: 3)

// 이와 같이 Array(repeating:count:) 구문을 이용하여 배열을 생성하면
// 지금까지 초기화했던 배열과 달리 배열의 인덱스가 개수만큼 미리 정의되고,
// 여기에 기본값이 각각 추가된 상태로 배열이 만들어집니다.

참고

NSArray, NSMutableArray
스위프트에서 제공하는 배열은 Aray이지만, 10S용 앱을 만들다 보면 또 다른 배열 객체와 마주하게 됩니다.
NSArray NSMutableArray가 그것인데요. 이들은 스위프트 언어 자체에서 제공하는 Array와는 달리 파운데 이션 프레임워크에서 제공하는 객체입니다. 오브젝티브-C로 앱을 개발하던 시절에는 배열 형식의 데이터를 다룰 때 대부분 SAray, NSMutableArray를 사용했죠. NSArray는 수정이 필요 없는 배열에, NSMutableAray 는 수정이 필요한 배열에 각각 사용합니다.
파운데이션 프레임워크의 배열과 스위프트 배열의 차이는 몇 가지로 정리해볼 수 있습니다. 우선 스위프트에 서의 배열은 구조체로 정의되어 있지만, 파운데이션 프레임워크에서 제공하는 배열은 클래스로 정의되어 있습 니다. 또 다른 점은 스위프트에서의 Array는 생성할 때 정의된 한 가지 타입의 자료형만 배열에 저장할 수 있지 만, 파운데이션 프레임워크의 배열들은 데이터의 타입에 상관없이 저장할 수 있습니다. 그래서 앞으로도 타입 이 명확하게 정해지지않은 불특정형 집합 데이터나 여러 종류의 값이 섞여 있는 집합 데이터를 처리할 때에는 NSArrayL NSMutableArray를 사용해야 합니다.

profile
Flutter App Developer

0개의 댓글