배열 Array

하나의 데이터타입을 연속적으로 저장하는 자료구조

var 변수이름 = [값1, 값2, 값3, …] let 상수이름 = [값1, 값2, 값3, …]

비어있는 배열을 생성하기 위해서는 타입을 명시해야 한다.
var 배열명 = Array<타입>()

또는 간단하게, var 배열명 = [타입]()으로도 비어있는 배열 생성이 가능하다.

var scores = Array<Int>()
var heights = [Int]()
var strings: [String] = ["a", "b", "c"]

유용한 함수, 프로퍼티

  • Array.count : 배열 원소의 개수를 리턴함
  • Array.remove(at:Int) : Int에 지정된 정수에 해당하는 인덱스에 있는 원소를 제거
  • Array.removeAll() : 배열에 있는 모든 원소를 제거
  • Array.contains() : 배열에 인수에 해당하는 원소가 저장되어 있는지? true/false
  • Array.sorted() : 배열의 원소를 정렬해서 출력 (배열 자체가 정렬되는 것은 아님)
  • Array.reversed() : 배열을 뒤집은 결과를 리턴

딕셔너리 Dictonary

key-value의 형식으로 자료를 저장하는 구조

let employee = [
    "name" : "Lee",
    "age" : 24,
    "height" : 170
]

딕셔너리에서 데이터를 읽어올 때는 딕셔너리의 key를 사용한다.

print(employee["name"])
print(employee["location"])
print(employee["height", default:"Unknown"])

>> Optional("Lee")
>> nil

key를 사용해 딕셔너리의 데이터에 접근을 시도하는 경우,
key에 해당하는 값이 존재하지 않을 가능성이 있다고 판단해 Optional로 래핑하여 결과를 반환한다.
key에 해당하는 값이 실제로 없는 경우 nil을 반환한다.
default 인자에 값을 설정하여 key에 해당하는 값이 없는 경우 nil 대신 기본값을 반환하는 방법이 있다.

딕셔너리에 key에 해당하는 값이 있을거라 장담하지 말 것.

빈 배열을 생성하는 것과 비슷하게 빈 딕셔너리를 생성할 수 있다.

//key가 String형이고 value가 Int형인 빈 딕셔너리를 생성
var heights = [String:Int]()

heights["Lee"] = 170
heights["Seo"] = 201

딕셔너리에서는 key의 중복을 허용하지 않기 때문에, 이미 존재하는 key의 값을 수정하게 된다.

딕셔너리의 유용한 함수, 프로퍼티

배열과 마찬가지로, .count.removeAll()이 모두 사용 가능하다

세트 Set

세트는 배열과 비슷하지만, 중복 저장이 불가능하고 저장하는 순서가 정해져 있지 않은 자료구조이다.

let 세트명 = Set([데이터...])

빈 세트를 생성하는 방법 또한 배열과 비슷하다.

var s = Set<String>()
s.insert("Lee")
s.insert("Park")
s.insert("Kim")

빈 세트에 원소를 추가하는 함수는 .insert()인데, 배열에서 사용하는 .append()가 아니다.
.append()는 자료구조의 맨 끝에 원소를 추가하지만, .insert()는 자료구조 안의 아무 곳에나 원소를 삽입하기 때문이다.

세트를 사용하는 경우

  • 원소의 중복 저장이 허용되지 않을 때
  • 특정 원소를 빠르게 찾고 싶은 경우

.contains() 함수 사용 시 차이를 확인할 수 있다.

배열은 맨 앞부터 시작하여 원소를 찾을 때까지 순서대로 검사를 하지만,
세트는 그에 반해 빠르게 원소를 찾을 수 있다.
이 특징은 자료구조 내에 원소가 매우 많을 때 (ex.1000개 이상) 차이가 두드러진다.

대부분은 배열을 사용하겠지만 특정 문제에 따라서 세트를 사용하는 것이 더 유리할 때도 있다.

열거형 Enum

여러 줄에 걸쳐 정의하는 경우, case 케이스명

한 줄에 여러 열거형을 정의하는 경우 콤마(,)로 구분

값의 범위가 고정되어 있는 경우 사용하면 편함.


//여러 줄에 걸쳐 케이스를 정의하는 경우
enum Weekday {
    case monday
    case tuesday
    case wednesday
    case thursday
    case friday
}

var day = Weekday.monday
day = Weekday.friday

--- 또는 ---

//한줄에 케이스를 정의하는 경우
enum Weekday {
    case monday, tuesday, wednesday, thursday, friday
}

변수에 열거형을 할당하면 변수는 열거형 타입으로 추론된다. 다른 타입의 값을 할당할 수는 없지만, 편하게 값을 변경할 수 있다.

var day = Weekday.monday

//Weekday와 같은 열거형 타입을 입력하지 않아도 된다.
day = .friday
day = .thursday

swift 내부적으로는 열거형을 정수로 저장한다. 0,1,2…


참고: https://www.hackingwithswift.com/100/swiftui/3

카테고리:

업데이트: