[Swift CS Study] Collection - 배열 (Array)

21.06.12

공부한 것을 정리하는 용도의 글이므로 100% 정확하지 않을 수 있습니다.
참고용으로만 봐주시고, 내용이 부족하다고 느끼신다면 다른 글도 보시는 것이 좋습니다.
+ 틀린 부분, 수정해야 할 부분은 언제든지 피드백 주세요. 😊

                                                 by. ryalya



🔶 컬렉션(Collection)이란?

여러 값의 데이터들을 묶어서 하나의 변수로 저장하고 관리할 수 있는 데이터 타입을 말함.

Swift는 다양한 컬렉션 타입들을 제공하는데, Array(배열), 딕셔너리(Dictionary), Set(세트)등이 이에 해당한다.

간단하게 정리하면 아래와 같습니다.

  • Array : 순서가 있는 리스트 형태의 컬렉션
  • Dictionary : Key와 Value의 쌍으로 이루어진 컬렉션
  • Set : 순서가 없고, 멤버가 유일한 값으로 구성된 컬렉션

오늘은 컬렉션 타입 중 Array의 대해서 정리하겠습니다.




Array(배열)이란?

배열은 위에서 언급한 것과 같이, 순서를 가지고 있는 리스트 형태의 컬렉션을 말한다.
각각의 요소는 순번을 가지고 있는데, 이를 인덱스(Index)라고 부른다.
우리는 이 인덱스(Index)를 통해 배열이 가지고 있는 요소에 접근할 수 있다.
인덱스(Index)는 0부터 시작한다.


🔹 배열 선언 (Create Array)

1. 빈 배열 생성

빈 배열을 선언하는 방법은 여러가지입니다.
정식 문법과 단축 문법으로 나뉘는데 코드를 짤 때 어떤 문법을 사용할지는 사용자의 편의에 따르면 된다.

  • (상수 let 또는 변수 var) 배열 이름 : Array< 배열 타입 >

  • (상수 let 또는 변수 var) 배열 이름 : [배열의 타입]

<예시>
#1.
var doubleArray : Array<Double> = Array<Double>()

#2.
var doubleArray : Array<Double> = [Double]()

#3. 
var doubleArray : [Double] = [Double]()

#4.
var intArray = [Int]()

#5.
var doubleArray : [Double] = []

→ 나는 4,5번 방법이 간편하고 쉽기 때문에 많이 사용한다. (길면... 기억이 안남...'-';....)


2. 배열 생성 (형식 추론)

빈 배열을 생성할 때는, 타입을 명시해야하기 때문에 위의 생성 예시처럼 오른쪽에 정수형인지 문자열 배열인지 명시를 해줘야 한다.

하지만, 배열에 아래 예시 1,2와 같이 값을 넣어준다면?

  • (상수 let 또는 변수 var) 배열 이름 = [값]
<예시>
#1.
var intArray = [1, 2, 3, 4, 5]

#2. 
var stringArray = ["가", "나", "다"]

#3. 
var numArray = Array(1...3)

정수형인지 문자열인지 타입을 명시하지 않아도 Xcode는 들어간 값을 알아서 확인하고,
1은 변수형 정수 배열이구나! 2는 변수형 문자열 배열이구나! 알아서 처리해줍니다.

3의 경우는 시퀀스 형식으로 3과 같이 값을 넣어주면 numArray를 print해봤을 때, 1,2,3이 나오는 것을 확인할 수 있다.


3.기본 값으로 설정된 배열 생성

빈 배열, 문자열 또는 정수형 배열을 추론형식으로 생성하는 것 외에도 기본 값이 미리 정해져 있는 배열을 만들 수 있다.

아래 예시를 보자.

<예시>

#1.
var arr1 = Array(repeating: 0, count: 5)

#2.
var arr2 = Array(repeating: 2.5, count: 3)

괄호 안의 repeating과 count는 아래처럼 생각하면 쉽다.

  • repeating : 반복할 값
  • count : 반복할 횟수

예시 1은 0을 5번 반복해. 예시 2는 2.5를 3번 반복해. 라는 뜻으로
arr1과 arr2를 print로 찍어보면 아래와 같이 나오는 것을 확인 할 수 있다.

arr1 : 0, 0, 0, 0, 0
arr2 : 2.5, 2.5, 2.5


🚫 주의

  • 빈 배열은 타입 명시 없이 사용할 수 없다.
<예시>
var emptyArr = [] ❌
  • 서로 다른 타입의 값을 넣어 생성할 수 없다.
<예시>
var arrEx = [1, "가", "나", 2] ❌

→ 그러나 위의 경우에는 '예외'가 존재한다.


❗️ 예외

자료형 데이터 타입 중, Any는 Swift의 모든 타입을 지칭하는 데이터 타입!
타입을 Any로 설정한다면? → nil을 제외한 어떤 타입도 수용할 수 있다.

<예시>
var anyArr : [Any] = [1, 2, "one", "two"] 

🔹 Array 사용 (Array 접근)

먼저 변수형 Int 빈 배열을 생성 후, 사용법을 알아보자!

var intArr : Array<Int> = Array<Int>()

1. 값 추가

변수 정수형 빈 배열에 append를 사용하여 아래 예시와 같이 사용한다면?

intArr.append(1) // Index 0번에 1이 들어감
intArr.append(10) // Index 1번에 10이 들어감
print(intArr) // 1, 10

intArray에는 1, 10이 있는 것을 알 수 있음.


2. 특정 값 확인

swift는 contains를 사용하여 특정 값이 해당 array에 들어있는지 확인할 수 있다.

#1. 
intArr.contains(100)

#2.
intArr.contains(10)

contains는 문자열 또는 정수형의 포함 여부를 Boolean값으로 리턴해준다.

우리는 현재 intArr에는 1,10이 들어있다는 것을 알고 있으므로 당연히 예시 1번은 false, 예시 2번은 true라고 리턴해줄 것이다.


3. 배열 데이터 개수 확인

우리는 배열 데이터의 개수도 확인할 수 있다.

intArr.append(30)
intArr.count

위의 예시처럼 코드를 추가했다.
count함수를 사용하여 우리는 해당 배열에 데이터가 총 몇 개 들어있는지 알 수 있다.

현재 30을 추가한 상태이므로, print(intArr)를 하면 1, 10, 30이 들어있을 것이다.
intArr.count는 3이라는 값을 리턴할 것이다.


4. 특정 값 삭제

우리는 remove를 사용해서 특정 값을 삭제할 수도 있다.

아래 예시를 보자.

<예시>
#1.
intArr.remove(at: 0)

#2.
intArr.removeLast()

#3.
intArr.removeAll()

remove(at: ), removeLast(), removeAll()함수를 사용해보았다.

remove는 at을 사용하여 특정 인덱스 값을 삭제할 수 있는데, 위의 예시는 0번 인덱스를 지워줘! 라는 뜻이다.

0번 인덱스는 1이었으므로 print(intArr)을 하면 10, 30을 리턴할 것이다.

예시 2번은 마지막에 있는 인덱스를 지워줘. 라는 뜻이다.
마지막 인덱스는 30이었으므로 print(intArr)을 하면 10을 리턴할 것이다.

예시 3번은 모두 다 지워줘. 라는 뜻이다.
모든 데이터 값을 지워버렸으므로
intArr.count를 해보면? 0을 리턴할 것이다.


5. 배열 초기화

배열 초기화를 하는 방법은 두가지이다.

  1. removeAll()사용.
    위의 특정 값 삭제 에서 알았듯이, removeAll() 함수를 사용하여 배열을 비워주는 것이 첫번째.

  2. 초기화.
    아래 예시처럼 []를 사용하여 배열을 초기화 할 수 있다.

<예시>

// 빈 배열 생성
var someArr : [Int] = []

// 배열에 값 추가
somArr.append(3)

// 배열 초기화
somArr = []

6. 특정 위치 데이터 추가, 변경

문자열 배열을 하나 생성한다.

<예시>
var animals : [String] = ["dog", "cat"]

현재 animals라는 문자열 배열에는 dog와 cat이 있다.

- 특정 위치 데이터 추가

animals.insert("lion", at: 0)
print(animals.count, animals)

insert() 함수를 통해 특정 위치에 데이터를 추가할 수 있다.

.insert("", at: ) : 콤마(,)를 기준으로 앞은 넣을 데이터, 뒤는 몇 번째에 넣을지를 결정한다.

0번째에 lion을 추가했으므로 animals를 count하면 3이
animals를 출력하면 lion, dog, cat (lion이 0번째에 추가됨)

- 특정 위치 데이터 변경

데이터 변경을 위해 데이터를 몇 개 더 추가하겠다.

animals.append("fox")
animals.append("cow")
animals.append("deer")
print(animals) // lion, dog, cat, fox, cow, deer

// 특정 위치 데이터 변경
animals[3...5] = ["pig", "bear", "sheep"]
print(animals)

위의 코드는 아래와 같이 이해할 수 있다.
배열의 3~5번째 index의 데이터 값을 = [ ] 얘네로 바꿀거야.

animals를 print하면 lion, dog, cat, pig, bear, sheep이 나온다.

좋은 웹페이지 즐겨찾기