일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 생명주기
- K디지털기초역량훈련
- 회고
- 제어전송문
- 주간 달력
- On branch is up to date with ' '
- class
- AnyObject
- 글또
- uikit
- 연관값
- avaliable
- ios 개발 강의
- 파스칼표기법
- error해결
- 코드스니펫
- MyLife
- 글또9기
- 내_삶
- struct
- 다짐글
- SWIFT
- Switch
- IOS
- copy-on-write
- 바이트디그리
- Git
- actionSheet
- weekly calendar
- unrecognized selector sent to class
- Today
- Total
seong_hye, the developer
Swift) 문법 정리 - 옵셔널(Optional) / 옵셔널 바인딩 본문
Swift에서 다른 프로그래밍 언어에는 없는 새로운 개념을 만들었다.
기존의 타입은 메모리 공간에 어떤 형태로 자료가 들어있음을 알려주는 것이였다
하지만 만약 메모리에 저장된 값이 없는데 접근한다면?
에러가 발생하며 앱이 꺼지게 된다.
이런 상황을 방지하기 위해 탄생한 것이 바로 옵셔널 타입이다.
옵셔널(Optional) 타입이란?
변수 또는 상수에 값이 할당되지 않은 상황을 처리하기 위해
안전하고 일관된 접근 방식을 제공하는 것
var number: Int?
var name: String?
- 변수를 선언할 때, 데이터 타입 선언 다음에 '?' 문자를 두어 옵셔널이 되도록 한다.
- number와 name은 어떤 값도 할당되지 않은 nil 값을 가지게 된다.
주의할 점!!
- 할당된 값이 없거나 nil을 할당할 수 있는 것은 옵셔널 타입뿐이다.
- 옵셔널이 아닌 변수 또는 상수에는 nil(값이 없음을 나타내는 키워드)을 할당할 수 없다.
- 옵셔널 타입끼리의 연산은 불가능하다.
- optinal은 실제로 값이 없는 것이 아닌 임시적인 타입을 담아두고 있는 것이다.
- optional은 한번 걸러서(추출해서) 사용해야 한다.
==> 옵셔널 타입은 값이 없는 경우를 포함하는 타입이다.
==> 옵셔널타입과 옵셔널이 아닌 타입은 서로 다른 타입이다.
옵셔널 값의 추출 방법
1. 강제 언래핑(Forced unwrapping)
nil이 아닌 값이 있다는 것을 확신하고 강제로 값을 추출 (값이 없는 경우 에러)
옵셔널 데이터 타입에서 옵셔널 이름 뒤에 느낌표(!)를 두어 추출
var number: Int?
number = 3
print(number!)
2. nil 아닌지 확인후 , 강제 추출
if문을 통해 nil이 아님을 먼저 확인 후 강제 추출 (에러가능성이 없어짐)
var number: Int?
number = 3
if number != nil {
print(number!)
}
3. 옵셔널 바인딩 (Optional binding)
바인딩(상수나 변수에 대입)이 되는 경우만 특정 작업을 하겠다는 의미
- 지정된 옵셔널이 값을 가지고 있는지를 확인
- 옵셔널 변수가 값을 가지고 있는 경우에 선언된 선언된 상수 또는 변수에 그 값을 할당하는 코드가 실행
var number: Int?
number = 3
if let number = number {
print(number)
}
number 변수에 할당된 값이 언래핑되어 number라는 임시 상수에 할당되어 사용
임시 상수는 if문 안에서만 유효함
옵셔널로 할당된 동일한 이름은 충돌이 발생하지 않음
if let 바인딩과 guard let 바인딩의 차이
- if let 바인딩의 경우 임시 상수가 if문 안에서만 유용
- guard let 바인딩의 경우 가드문에서 선언된 변수를 아래문장에서 사용 가능
(동일한 스코프로 취급)
var number: Int?
number = 3
guard let n = number else { return }
print(n)
4. 닐 코얼레싱 (Nil- Coalescing)
옵셔널 표현식 뒤에 기본값을 제시해서, 옵셔널의 가능성을 없앰
물음표 2개 (??)를 사용해 앞의 옵셔널 값이 nil이면 물음표 뒤의 값을 기본값으로 제시함
var number: Int?
print(number ?? 3)
닐 코얼레싱 방법은 삼항연산자를 활용한 방법으로도 풀이가 가능함
var number:Int?
print(number != nil ? number! : 3)
옵셔널에 대한 이해를 제대로 하려면
많이 써보는 방법이 최고일 듯하다
참고자료)
'IOS' 카테고리의 다른 글
Swift) 문법 정리 - 연산자 (0) | 2022.07.12 |
---|---|
Swift) 문법 정리 - 클래스(Class) vs 구조체(Struct) (0) | 2022.07.12 |
Swift) 문법 정리 - 반복문 (0) | 2022.07.12 |
Swift) 문법 정리 - 조건문 (0) | 2022.07.12 |
Swift) 문법 정리 - 컬렉션 타입 (Collection) (0) | 2022.07.12 |