티스토리 뷰

Swift/야곰의 스위프트

8장 옵셔널

할루루 2018. 2. 3. 15:15

[시작]


- Swift의 특성 중 Safe를 문법으로 담보하는 기능

- 옵셔널 : 값이 있을 수도 있고 없을 수도 있다

- 옵셔널인 값과 옵셔널이 아닌 값은 서로 다른 타입



[옵셔널 사용]


- NULL == nil, 완벽하게 같은 표현

- 옵셔널 변수(상수)가 아니면 nil을 할당할 수 없음

 : 해당 변수(상수)에는 값이 없을 수 있다 -> nil일 가능성이 있으므로 사용에 주의하라

 : nil에 강제 접근하면 런타임 오류 발생

- 타입명 뒤에 물음표(?)를 붙임으로서 해당 변수(상수)가 옵셔널 변수(상수)임을 알림

 : Optional<[타입명]>이라고 쓸 수도 있음


- 옵셔널은 열거형으로 구현되어 있음


1
2
3
4
public enum Optinal<Wrapped> : ExpressibleByNilLiteral{
    case none
    case some(Wrapped)
}
cs


옵셔널은 제네릭이 적용된 열거형

값을 가지면 some(Wrapped), nil이면 none으로 가서 처리

-> 값이 옵셔널이라는 열거형의 방패막에 보호되어 래핑되어 있는 모습


- 열거형이므로 switch문을 통해 값이 있는지 확인할 수 있음

 : 일반적으로 switch문을 통해서 옵셔널 변수의 값 유무를 확인하지는 않음



[옵셔널 추출 - 강제 추출]


- 옵셔널 값의 뒤에 느낌표(!)를 붙이면 값을 강제로 추출하여 반환

- 이 경우 옵셔널에 값이 없다면 런타임 오류

- 매우 위험함, 지양해야 할 방법



[옵셔널 추출 - 옵셔널 바인딩]


- if문과 값 바인딩을 사용하여 옵셔널 값을 안전하게 추출

- 바인딩된 변수는 해당 블록 안에서 사용 가능

1
2
3
4
5
6
7
let string: String= nil
if let value = string{
    print(value)
}
else{
    print("NOOOO")
}
cs

위의 코드는 옵셔널 상수 string을 옵셔널 바인딩을 통하여 값을 추출함, if문 내에서 바인딩한 상수 value를 사용할 수 있음


- 여러 옵셔널의 값을 바인딩할 수 있음, 이 경우 하나라도 nil이면 해당 스코프는 실행되지 않음



[옵셔널 추출 - 암시적 추출 옵셔널]


- 때때로 nil을 할당하고 싶지만 옵셔널 바인딩으로 매번 값을 추출하기 귀찮거나 로직상 nil 때문에 오류가 발생하지 않을 것 같다는 확신이 들 때 사용

- 옵셔널 상수(변수)의 타입명 뒤에 물음표가 아닌 느낌표를 붙임

- 옵셔널 바인딩이나 강제 추출을 사용하지 않아도 일반 값을 사용하는 것처럼 코드 작성 가능

- nil이 할당되어 있으면 해당 변수를 추출할 때 오류 발생

- 이 또한 지양

'Swift > 야곰의 스위프트' 카테고리의 다른 글

10장 프로퍼티와 메서드  (0) 2018.02.03
9장 구조체와 클래스  (0) 2018.02.03
7장 함수  (0) 2018.01.29
6장 흐름 제어  (0) 2018.01.29
5장 연산자  (0) 2018.01.29
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함