[swift] array, 배열

이은수, Lee EunSoo·2024년 8월 21일
0

Swift Basic

목록 보기
2/24
post-thumbnail

개요

swift의 배열에 대해서 이야기 해보려고 한다.

배열은 동일한 타입의 데이터를 연속해서 저장하고 사용하는 컬렉션 타입을 말한다.

배열의 크기에 대해

swift의 배열은 java나 C에서 처럼 정해놓고 사용할 수 있긴 하지만 기본적으로 가변적인 크기를 지원한다 무슨 말이냐면 swift에서 배열은 다른언어들의 ArrayList처럼 동작한다는 말이다.

선언할때 크기 지정 없이 생성이 가능하고 값을 추가하면 자동으로 크기를 키운 배열을 생성해서 거기에 복사해 넣는다

다음은 애플 공식문서에서 발췌한 내용이다.

"모든 배열은 내용을 보관하기 위해 특정 양의 메모리를 예약합니다"

"배열에 요소를 추가하고 해당 배열이 예약된 용량을 초과하기 시작하면 배열은 더 큰 메모리 영역을 할당하고 요소를 새 저장소로 복사합니다. 새 저장소는 이전 저장소 크기의 배수입니다"

배열 생성시에 배열의 크기를 지정한 경우 추가하고자 한다면 자동으로 배열의 2배크기로 확장한 배열을 생성해서 거기에 기존의 값을 넣어준다고 한다.

이러한 원리 때문에 swift에서는 배열에 대해서 .capacity를 제공한다
배열이 메모리에서 얼마만큼의 크기를 갖는지 직관적으로 확인하게 도와준다
(배열을 .remove()하고 .count, .capacity하면 서로의 값이 다른것을 볼 수 있음)

사용법

var arr = [1,2,3,4,5] //타입추론 이용

var arr1: [Int] = [1,2,3,4,5]

var arr2 = Array<Any>()

var arr3: [Any] = Array<Any>()

arr3가 제일 교과서적인 사용방법이고 형태는 편한대로 사용하면 된다.

Any는 모든 타입을 허용하는 키워드이다, int, double, string뿐만 아니라 클로저등등 모든 인스턴스가 가능하다.

빈배열을 만드는 방법

var arr = [Any]()

var arr: [Any] = []

swift에서 배열의 크기는 가변적이기에 빈배열을 생성하고 별도의 과정없이 추가만 해주면 알아서 배열이 확장된다.

값에 접근하는 방법

arr[0], arr[1], arr[2] ... 처럼 인덱스를 이용하여 접근한다

for문을 이용해서 접근

var arr = [1,2,3,4,5]

for i in arr{
	print(i)
}
1
2
3
4
5

.isEmpty

배열이 빈 배열인지 확인해 주는 메소드로 빈배열이라면 true를 아니라면 false를 반환한다.

var arr = [Any]()

print(arr.isEmpty)
true

배열의 복사

var arr:[Int] = [1,2,3,4,5]
var copyArr = arr

class Ref{
 var index = 10
}

var refs:[Ref] = [Ref(), Ref(), Ref()]
var copyRefs = refs

copyRefs[0].index = 12

print(copyRef[0].index)
12

-> 레퍼런스를 저장하는 것이기에 메모리 주소값을 복사했기에 서로 변경이 가능한 것이다.

이처럼 배열은 정수나 문자열같은 타입 뿐만 아니라 인스턴스도 배열로 만들 수 있다.

배열의 기능

  • init()
  • init(T)
    • 제네릭을 이용한 배열 생성
  • init(repeating: Element, count: Int)
  • 배열검사

    • .isEmpty
    • .count
    • .capacity
  • 요소 접근

    • .first
    • .last
    • .randomElement()
    • .randomElement(using: inout T) -> Self.Element?
      • 직접만든 난수 생성기로 값 추출
  • 요소추가

    • .append(Element)
    • .insert(Element, at: Int)
    • .reserveCapacity(Int)
      • 지정된 수의 요소를 저장할 수 있는 충분한 공간을 예약합니다.
  • 배열의 결합?

    • append<>(contentsOf: )
    • append(contentsOf: )
    • +=, + 연산자도 사용가능
    • 배열의 끝에 시퀀스의 요소를 추가하거나 컬렉션의 끝에 시퀀스나 컬렉션의 요소를 추가하다는 뜻
  • 요소 제거

    • remove(at: )
    • removeFirst()
    • removeFirst(at: )
      • 1 ~ at 지우기
    • removeLast()
    • removeLast(at:)
      • at ~ last 지우기
    • removeSubRange()
    • removeAll()
    • popLast()
      • 마지막의 요소를 지우고 반환함, Stack처럼 사용하라고 만든듯...
  • 요소 찾기

    • .contains(where: Element)
    • .first()
    • .last()
    • .min()
    • .max()
    • .index()
  • 배열 정렬

    • sort()
    • sorted() //정렬후 반환
    • reverse() // 배열을 원위치로 되돌림
    • reversed() // 요소를 역순으로 표현하는 뷰 반환
    • shuffle() // 배열을 섞음
    • shuffled() //섞은 배열을 반환

참조

애플 배열문서

profile
iOS 개발자 취준생, 천 리 길도 한 걸음부터

0개의 댓글