티스토리 뷰


집단 자료형 - 배열

(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





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함