안녕하세요!
오늘은 Collection(컬렉션)에 관하여 알아보고자 합니다
관련이 있는 데이터 끼리 모아서 관리할 수 있도록 제공을 하게되는데
손쉽게 그룹 단위로 묶고 데이터를 다룰 때 편리하도록 제공하고 있답니다
Collection
Collection에는
Array
Set
Tuple
Dictionary
가 있습니다
오늘은 Array에 대해서 정리하고자 합니다
Array(배열)
Array는 제가 과거에 타 언어에서도 정말 많이 사용했었답니다 :)
배열은 알고리즘으로도 많이 사용하며 다채롭게 사용하는데요
하나의 데이터 타입인 리스트 형식으로 정렬되어있는 목록이랍니다
순서대로 정리되어있는데 Index라고 부릅니다
배열에서 Index를 사용하여 배열 내 item을 가지고 올 수 있습니다
인텍스는 정수로 되어있고 인덱스는 0부터 시작된답니다(순서대로 저장하기 때문에 자동으로 순번이 지정됨)
item이 추가될 때마다 차례로 증가한답니다
배열은 순회할 때 중간에 값을 생략하거나 건너 뛸 수 없습니다
(다만 조건을 추가해서 건너 뛸 수 있겠지만요)
몇 가지 특징을 가지고 있는데요
배열의 크기는 동적으로 확장이 가능
선언 시 배열에 저장할 아이템 타입을 명확히 정의해야한답니다
배열에 저장할 아이템의 타입에는 제약이 없지만 배열에 저장하려면 한가지의 타입으로 나열해야합니다
글로만 보면 감이 잡히지 않으니
기본 코드 작성법을 봅시다!
배열 타입 표기
배열의 타입 표기에 대해서는 여러가지로 표현이 가능하답니다
여기서 마음에 드는걸 사용하면 됩니다
굳이 다 여러가지 사용하지 않아도 여기 중에 하나를 사용하면 된답니다
그리고 기본 배열 코드 사용방법에 대해서 알아 봅시다!
이렇게 다양하게 작성이 가능하고
꼭
[ ]로 감싸줘야합니다
꼭 한가지의 자료형만 사용할 수 있답니다
여기서 값이 들어가면 자동으로 순서가 부여됩니다
리터럴이란??
값 자체
값이 변수나 상수에 담긴 형태가 아니라 그에 저장되는 값 자체를 리터럴이라고 부릅니다
var literal = 90
90을 리터럴이라고 합니다
예를 하나 더 들자면
var literal2 = "hi"
"hi"를 리터럴이라고 부르는겁니다
순서도를 정리하면
위 처럼 확인할 수 있습니다
위에서 배열(Array)는 구조체로 이루어져 있는데
구조체에 .으로 접근해본다면
여러가지 멤버 함수를 확인할 수 있습니다
이것말고도 정말 다양하기 때문에 확인해보시기 바랍니다~!
그리고 각 배열에 접근하려면 어떤식으로 해야하는가?!
이런식으로 접근 및 첮번째 인덱스 및 마지막 인덱스를 찾을 수 있답니다 :)
그리고 배열의 중간이나 초반 마지막 어느곳에
값을 추가해야하는 상황이 있을 수 있잖아요?
그럴땐 insert를 사용하시면 된답니다
이렇게 2가지로 사용할 수 있습니다
요소 확장 메서드를 사용해서도 가능하답니다
insert가 아닌 append로!
하지만 insert와 append가 다른 이유가 있습니다
append는 그저 확장하기뜻으로
마지막 인덱스에서 추가만 가능합니다
그리고 마지막으로 단순하게 추가하는 방법도 있답니다
이렇게 사용하면 된답니다
쉽죠??
반대로 요소를 제거하고 싶을 순간이 있을 수 있습니다
그때는 Remove메서드를 사용하기면 됩니다
Remove 메서드는.. 굉장히 많아요.. 정말
그리고 범위연산자를 사용하여서 한 번에 제거하는 방법도 있습니다
append / insert 메서드를 사용할 때
contentsOf를 사용해서 여러개를 한 번에 추가하는 방법이 있었지만
removeSubrange(_:)를 사용하여 원하는 범위를 삭제할 수 있습니다
범위 연산자를 사용하지 않고 처음과 마지막 인덱스의 요소를 삭제하거나
범위를 잡고 삭제하고 싶으면 위의 이미지 처럼 사용하면 됩니다
그리고 전체 삭제를 할 때 공간을 유지하거나 유지하지 않고 전체 삭제하는 두가지 버전을
확인할 수 있습니다
공간을 확인하고 싶다면capacity확인할 수 있습니다
왜이렇게 차이가 날까요??!!
공간과 갯수는 같은거 아냐??라고 생각할 수 있지만
XXXX
capacity는 할당된 메모리의 크기를 나타냅니다
즉 +저장되어있지 않는 크기까지 합산해서 말해주고 있습니다!!
array가 현재 할당된 메모리의 용량을 반환해주고 있습니다!
count는 현재 저장된 요소 갯수를 나타냅니다
즉 remove 메서드를 사용하면 공간이 사라질거라고 생각하지만 배열의 count는 감소하지만
배열이 할당된 메모리의 용량은 그대로 유지된답니다
그래서 배열의 요소를 삭제해도 capacity는 그대로 유지되기 때문에
추가한다고 해도 새로운 메모리를 다시 할당하지않기 때문에
할당하는데 드는 비용을 피할 수가 있답니다 :)
배열에 있는 요소에서 값을 수정해야하는 경우가 많은데요
그럴 때 사용하는 경우를 알아보고자 합니다
이렇게 하나의 값을 수정할 수도 있고 범위를 잡고 수정할 수도 있고 여러가지로 수정할 수가 있답니다!
그리고 교체함수를 사용하여 수정할 수가 있답니다
replaceSubrange메서드를 사용해서 범위를 잡고 변경할 배열을 with에 넣어주면 된답니다
그럼 9, 11, 13, 15
0, 1, 3, 15로 변경된것을 확인할 수 있습니다
배열의 정렬과 역순에 대해서 알아보고자 합니다!
정렬을 사용한다면
sorted / sort가 있는데 무슨차이인지 코드를 보시면
바로 알 수가 있답니다
sort
배열 자체가 오름차순이나 내림차순으로 변경되는걸 확인할 수 있습니다
(원 배열에 영향을 준다!!)
OOOO
sorted
배열 오름차순이나 내림차순으로 변경되지만 원
배열에 영향을 주지 않음
XXXX
뒤집는 메서드를 사용했을 때도 동일합니다
reverse()를 사용했을 때
원 배열에 영향이 가지만
reversed()를 사용했을 때
본 배열에 영향이 가지 않습니다
이것 말고도 shuffle() / shuffled()
랜덤으로 섞는 메서드도 있습니다
== 동일하다면 true
!= 동일하지 않다면? false
배열이 정말 하나도 다르지 않게
동일해야합니다
배열이 길어져서 다음에 set을 정리하도록 하겠습니다
혹시나 틀린게 있다면 알려주시면 감사하겠습니다
참고
'Swift' 카테고리의 다른 글
Swift | Collection (컬렉션)에 관하여 3 - Dictionary (0) | 2024.05.11 |
---|---|
Swift | Collection (컬렉션)에 관하여 2- Set (0) | 2024.05.11 |
Swift | 제어 전달문 - break / continue / fallthrough / return (0) | 2024.05.10 |
Swift | 조건문에 관하여 - if / swift / guard (0) | 2024.05.09 |
Swift 공식문서| 제어 흐름 (Control Flow)에 관하여 - 반복문 foreach와 for문에 관하여 (0) | 2024.05.09 |