티스토리 뷰
집단 자료형 - 배열
(Collection Type - Array)
1) 이론적 정의
1. Swift 에서 사용되는 집단 자료형으로는 배열(Array) , 집합(Set) , 딕셔너리(Dictionnary) 가 있다. 여기서는 먼저 배열에 대해 알아보자.
2) 배열(Array)
1. '순서'가 있는 Collection.
2. '0' 에서 시작하는 정수 Index를 갖는다.
* Example 1. 변수와 상수에 할당된 배열
var variableArray = [1, 2]
variableArray = [ ] <-- 변수일 때는 오류 발생 X
let constantArray = [1, 2]
// constantArray = [ ] <-- 상수일 때는 오류 발생 O
* Example 2. 배열의 Type 지정
var arrayFromLiteral = [1, 2, 3]
arrayFromLiteral = []
//let emptyArray = [] <-- 빈 배열의 선언은 오류 발생. 타입 지정을 통해서 해결해야 한다.
let emptyArray: [String] = [] <-- 요렇게 하면 해결~~~~ ^0^
* Example 3. 배열에서의 초기화(Initialize)의 다양한 형태
let strArray1 : Array<String> = ["a", "b", "c"]
let strArray2 : [String] = ["a", "b", "c"]
let strArray3 = ["a", "b", "c"]
let strArray4 = Array<String>(repeating: "Swift", count: 5) <-- "Swift"를 5번 반복해서 만들어라.
let strArray5 = ["apple", 3.14, 1] <-- 배열 내부의 아이템들의 타입이 달라서 오류가 발생한다. 그럼 어떻게 해결할까? 아래를 보자.
let strArray5 : [Any] = ["apple", 3.14, 1] <-- [Any] : 어떤 특정한 데이터 타입 말고 다른 타입들도 한번에 쓸 수 있는 방법.
* Example 4-1. 각 요소들의 개수(Number of elements)
var fruits = ["Apple", "Orange", "Banana"]
let countOfFruits = fruits.count <-- .count는 배열에 요소들의 개수를 출력한다. 결과는 3
* Example 4-2. .count / .isEmpty 의 활용
if fruits.count == 0 {
< fruits 배열의 개수가 0일때 실행할 구문 입력 >
}
.isEmpty 는 배열이 비어있음(=가지고 있는 요소가 없음)을 나타낸다.
if !fruits.isEmpty { <-- 해석 : fruits 배열의 값이 있으면 true 없으면 false / !A = A가 not이면 True, 맞으면 False
print("\(countOfFruits) element(s)")
} else {
print("empty array")
}
* Example 5. 배열의 요소를 검색(Retrieve an element)
- 배열이 포함된 변수[Int]
- 배열이 포함된 변수[Array.Index]
- 배열이 포함된 변수[a...b]
- 배열이 포함된 변수[a..<b]
배열의 각 요소들은 Index를 이용해 접근이 가능하다.
Index 0 1 2
fruits = ["Apple", "Orange", "Banana"]
fruits[0] <-- "Apple"
fruits[2] <-- "Banana"
fruits[123] <-- 인덱스에 포함되지 않는 Error
fruits.startIndex <-- Zero-Based : 0
fruits.endIndex <-- end : 인덱스 순서의 끝을 의미하는 것이 아니라 배열에 포함된 값의 갯수 만큼 잡힌다.
(만약 인덱스 순서의 끝을 의미했다면 2가 되어야 하겠지만 결과는 3이 나온다)
fruits[fruits.startIndex] <-- "Apple" Ref. 변수명.startIndex 로도 인덱스 값에 접근할 수 있다.
fruits[fruits.endIndex] <-- 오류 : .endIndex 는 3이 나오니까 인트값 접근에서 오류가 난다. (fruits[3] 과 같다) 그러니 아래 처럼 '-1'써줘야 마지막 값이 나온다.
fruits[fruits.endIndex - 1] <-- "Banana"
fruits.startIndex == 0 // true
fruits.endIndex - 1 == 2 // true
* Example 6. Searching
let alphabet = ["A", "B", "C", "D", "E"]
if alphabet.contains("A") { <-- contains() 메소드는 괄호() 안의 요소가 대상 배열에서도 존재하는지에 따라 Boolean 타입으로 결과를 반환하는 메소드.
만약 alphabet 상수에 "A"라는 값이 포함되어 있다면 아래를 실행한다.
print("contains A")
}
* Example 6-1. 내가 원하는 값 'D' 가 몇 번째에 위치해 있는지 ?
case 1.
print(alphabet.index(of: "D")!) <-- 3 출력
* Ref 1. '.index(of: value)' 메소드는 배열의 아이템을 넣으면 그 아이템이 배열의 몇 번째 인덱스에 저장되어 있는지 알려주는 역할
* Ref 2. 들어가는 값이 있을 수도 있고 없을 수도 있어서 옵셔널('!') 을 사용한다.
case 2.
if let index = alphabet.index(of: "D") {
print("index of D: \(index)")
}
case 3.
let idx1 = alphabet.index(of: "D")
print(idx1!) <-- 결과 : 3 Ref. 옵셔널을 사용한 이유는 저 idx1 의 아이템의 인덱스가 'nil' 값이 나올 수 있기 때문이다.
let idx2 = alphabet.index(of: "Q") <-- nil 값.
print(idx2!) <-- 결과 : 오류 Ref. Q 값이 존재하지 않아서 프린트 자체가 불가능.
alphabet[idx1!] <-- 결과 : idx1!의 값이 3 이다. 그럼 alphabet[3] 이 되니 결국 인덱스 3의 값을 다시 내놓으라는 이야기.
* Example 7. 배열 내에 새로운 요소를 더하기(Add a new element)
var alphabetArray = ["A"]
case 1.
alphabetArray.append("B") <-- .append(element) 으로 추가하는 방법 1 Ref. .append 로 들어간 아이템은 배열의 가장 끝으로 들어간다.
alphabetArray.append(1) <-- 현재 배열의 아이템으로 문자열 리터럴이 들어가 있는데, 갑툭튀로 Int 타입의 1이 들어가서 오류가 난다.
case 2.
alphabetArray += ["C"] <-- += [element] 을 통해서 추가하는 방법 2
case 3.
var alphabetArray2 = ["Q","W","E"]
alphabetArray + alphabetArray2 <-- 다른 배열을 변수나 할당한 후 배열 두 개를 + 연산자를 이용해 추가하는 방법 3
case 4.
alphabetArray.insert("S", at: 0) <-- .insert(_, at: _) 은 원하는 곳에 아이템을 추가. 추가되어 원래 있던 인덱스는 뒤로 갈수록 모두 +1이 된다.
alphabetArray.insert("F", at: 3) <-- alphabetArray 의 최종 결과 : ["S", "A", "B", "F", "C"]
* Example 8. 존재하는 요소를 바꾸기(Change an existing element)
* alphabetArray 의 현재 값 : ["S", "A", "B", "F", "C"]
alphabetArray[0] <-- "S"
alphabetArray[0] = "Z"
alphabetArray <-- ["Z", "A", "B", "F", "C"]
Operator & Array : 배열의 인덱스를 범위 연산자로도 나타낼 수 있다.
alphabetArray[2...2] = ["G"]
alphabetArray <-- ["Z", "A", "G", "F", "C"]
배열 요소 지우기 : .remove(at: ) 메소드를 사용해 배열의 요소를 지울 수 있다.
alphabetArray <-- ["Z", "A", "G", "F", "C"]
let removed = alphabetArray.remove(at: 0) <-- "Z"
removed <-- 제거와 함께 상수 remove 에는 "Z" 값이 할당되었다.
alphabetArray <-- ["A", "G", "F", "C"]
다 지워버리기 : .removeAll()
alphabetArray.removeAll() <-- [ ]
지금까지 배열에 대해서 알아보았습니다. 틀린 부분이 있으면 댓글로 지적해주시면 감사드리겠습니다.
Made by Inswag's Swift in FastCampus 7th iOS Development School
'Programming > Swift' 카테고리의 다른 글
1. Swift : 집단 자료형(Collection Type) - 딕셔너리(Dictionary) (0) | 2018.06.24 |
---|---|
1. Swift : 집단 자료형(Collection Type) - 집합(Set) (0) | 2018.06.17 |
1. Swift : 열거형(Enumerations) (0) | 2018.06.15 |
1. Swift : 제어 전달문(Control Transfer Statement) (0) | 2018.06.02 |
1. Swift : 튜플(Tuple) (0) | 2018.06.02 |
- Total
- Today
- Yesterday
- tca
- 열거형
- Dictionary
- 타입
- 딕셔너리
- Operator
- array
- 컨버전
- inswag
- 스위프트
- commit
- ARC
- 개발스쿨
- 튜플
- GCD
- swiftUI
- fastcampus
- fallthrough
- 깃허브
- OOP
- ios
- 패캠
- Swift
- 프로그래밍
- 패스트캠퍼스
- lifecycle
- var
- iOS개발스쿨
- 리터럴
- function
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |