일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Swift
- Apple Developer Academy
- SwiftUI
- 데드락
- 비동기
- 상호배제
- scrollview
- decode
- COLOR
- struct
- 동시성
- 가상 메모리
- Linked List
- deadlock
- 프로세스 스케줄링
- IOS
- @state
- async
- 알고리즘
- forEach
- 운영체제
- UserDefaults
- core data
- 동기화
- Codable
- 앨런
- 인프런
- 오브젝트
- 100 days of SwiftUI
- Algorithm
Archives
- Today
- Total
기어가더라도 제대로
[3일차] 100일의 SwiftUI - 배열, 셋, 딕셔너리, Enum 본문
배열
- 배열은 스트링, 정수, 더블 처럼 고유한 자료 타입이다.
- 인덱스로 해당 자리에 있는 값을 호출한다.
- 실제하는 인덱스 바깥의 인덱스로 호출을 하면 크래시가 난다.
- .append() 로 추가하는데, 기존에 있는 데이터와 같은 타입의 데이터여야한다.
- swift는 자료형이 섞이는 것을 좋아하지 않는다.
- Array가 자신이 가지고 있는 범위 밖을 요청할 떄 에러를 내는 이유는 무엇인가?
- 없는 범위를 요구하면 에러를 내는것이 데이터가 없음에도 잘못된 데이터를 내는 것보다 낫다.
Dictionary
- 배열이 순서를 지키는 데이터를 저장하는데 최적의 선택이 될 수 있지만, 그 자리에 값이 있음을 항상 보장하지는 않는다.
- 만약 array[2] 를 요구했는데 그 배열이 조작되서 아이템의 개수가 2개밖에 없다고 하면 어떻게 할 것인가?
- 크래시가 난다.
- 딕셔너리는 배열이 값을 저장하는 것처럼 포지션 기반으로 값을 저장하지 않는다.
- 대신 우리가 값이 어디에 저장될지를 선택하게끔한다.
- 이는 값을 인출할 때 장점 아닌 장점이 되는데,
- 딕셔너리에서 값을 찾을 때 옵셔널 타입이 반환되는 것을 확인 할 수 있다.
- 우리가 찾으려는 Key 값이 Value를 가지고 있지 않을 때를 대비한 액션이다.
- 만약 키가 값을 가지고 있지 않다면 Optional(nil) 을 뱉으면 되기 때문이다.
- 배열에서 인덱스 바깥의 인덱스를 호출하면 크래시를 내는것과 대조적이다.
- 그래서 값이 없을 떄 이런식으로 대비할 수도 있다.
print(employee2["name", default: "Unknown"])
print(employee2["job", default: "Unknown"])
print(employee2["location", default: "Unknown"])
값이 없으면 "Unknown"을 뱉는 것이다.
Set
아이템을 특정 정렬 순서로 넣거나, 중복되는 값을 넣을 수 없다는 점만 빼면 배열과 비슷하다.
값이 어떤 순서로 들어갈지 모르기 때문에 .append() 대신 .insert() 를 쓴다 .
Set 이 순서가 없고, 복제본을 허용하지 않는 것의 장점
- 언젠가 중복이 없는 데이터의 집합을 원할 수 있다. 꼭 그 순간이 온다.
- 어떤 Value를 찾을 때 Array 는 그 값이 있는지 다 찾아봐야한다. O(N) 이 걸리는데 반해, Set 는 O(1) 이면 된다. 있는지 없는지 유일한 값일 것이기때문에 바로 찾을 수 있다.
Enum
열거형이 왜 필요한지는, 변수에 요일을 담는 코드를 생각해보자.
let monday = "Monday"
하다가 수요일을 개발자가 나중에 오타를 낼 수도 있지 않은가?
이런 가능성을 원천에 차단시켜준다.
그치만 enum을 사용하면 오타날 일도 없고, 값의 종류를 타입으로써 손쉽게 제한할 수 있다.
그리고 Swift 에서 저장할 때도 이득이 있다. 예를들어
enum Weekday {
case 월요일, 화요일, 수요일, 목요일, 금요일
}
이라고 저장해놓으면 Swift 에서 Weekday.월요일 을 저장할 때 그냥 숫자 0 으로 저장한다. 이는 "월요일" 글자가 맞는지 틀린지 확인하는 것보다 훨씬 저장 공간에서 이득이다.
'Swift - 기초' 카테고리의 다른 글
[5일차] 조건문 패밀리(if, switch ...) (0) | 2022.09.28 |
---|---|
[4일차] Type annotation (0) | 2022.09.28 |
[2일차] 100일의 SwiftUI - Boolean, String Interpolation, (0) | 2022.09.27 |
[1일차] 100일의 SwiftUI - 스트링, 숫자, Decimal (2) | 2022.09.27 |
Swift Package Manager 기초 (1) | 2022.05.28 |
Comments