Optional
옵셔널(Optional)은 언어적인 차원에서 안전성을 높이기 위해 사용하는 개념임
- 간단하게 말하면 nil 타입을 사용할 수 있는 타입들을 Optional Type이라고 부름!
nil
- 값이 없음을 의미하는 값
이거는 정수형의 0이나 문자열의 “”(빈문자열) 과는 다르게 진짜 값이 없음을 의미함
위 딕셔너리 처럼 값이 없을 때 오류를 처리하는 것이 아니라 nil을 내보냄으로써 안전성을 높힘
이러한 nil 값을 반환하기 위해서는 해당 타입이 옵셔널 타입이어야 함!
그럼 어떻게 옵셔널 타입을 선언할 수 있을깎???
- 타입 앞에 ? 를 붙혀주면 끝임
var result: Int? = nil
위와 같이 하면 nil 값을 가질 수 있는 Optional Int가 되는거임
따라서 nil 또는 nil이 아닌 Int 값 을 가질수 있는 자료형이 된겁니다!
근데 여기서 보면 옵셔널은 그럼 Int, String, Struct 등등 타입에 다 붙힐 수 있짜나요
그 이유는 뭘까여
옵셔널 은 열거형이고, 제네릭으로 선언이 되어 있습니다!
제네릭이니까 다양한 타입을 받을 수 있어요~!!
그럼 출력을 해보면 어떤 값이 나올까요???
다음과 같이 Optional()로 감싸진 Int형이 출력이 됨
이 값을 Int형으로 사용하기 위해서는 옵셔널 언래핑(Optional Unwrapping)을 해줘야 함
지금까지 내용 정리
- 옵셔널은 ? 키워드로 타입을 만들 수 있음
- 이 타입들은 nil 또는 nil이 아닌 optional 값을 가질 수 있으며, 사용하기 위해선 언래핑이 필요
Optinal 값 없애는 법
강제 언래핑(Force Unwrapping)
- 변수 뒤에 ! 를 붙혀주면 간단하게 됨.
하지만 강제적으로 하는 만큼 값이 무조건 있다는 확신이 있는 경우가 아니면 자제하는게 좋음
nil coalescing
닐 코얼레이싱? 닐 코얼레싱? 닐 코,,, 아무튼 이러한 방법도 있음
- ?? 키워드를 이용해서 해당 변수가 nil 일 때 대입할 값을 지정해주는 방법
위에서 result 변수에 값을 넣어주지 않아 자동으로 nil이 할당되었고,
nil coalescing을 이용해 nil 값일 경우 10을 대입하기로 함.
Optional Binding
여기에 포함되는 방법은 2가지가 있습니다.
- if let
if let을 이용하여 값이 있을 경우는 해당하는 값을, 없으면 else 문이 동작함!
그리구 다음과 같이 여러 옵셔널을 동시에 풀 수도 있음
- guard let
guard let을 이용해 옵셔널 처리를 한 모습
해당 조건이 nil일 경우에만 else 문이 동작함.
옵셔널 체이닝(Optinal Chaining)
구조체나 클래스 등의 타입 내부의 프로퍼티나 메서드가 옵셔널 값을 가지고 있을 때 많이 사용하는 거!
.(dot)을 통해서 접근을 많이 하잖아여?
뭐 person.address 뭐 이런식으루? 이때 내부 값이 옵셔널 값이 있다면 옵셔널 체이닝으로 처리함!
옵셔널 체이닝에 관해서는
Swift) Optional 부수기 (6) - Optional Chaining (옵셔널 체이닝)
Swift) Optional 부수기 (6) - Optional Chaining (옵셔널 체이닝)
안녕하세요~~ 소들입니다 😎 휴~~ 오랜만에 다시 Swift 포스팅이네염~~~~ 이번엔 옵셔널 부수기의 마!지!막!편!인 바로 옵셔널 체이닝 이란 개념입니다 ;)))) 사실 마지막이 아닐 수도 있. ... 옵셔널
babbab2.tistory.com
여기 참고하시면 백점..
'iOS > iOS 기술 면접' 카테고리의 다른 글
KVO(Key-Value Observing) (0) | 2023.11.09 |
---|---|
Struct는 뭐고 어떻게 사용할까? (0) | 2023.11.02 |
AnyObject (0) | 2023.11.02 |
Convenience init (1) | 2023.10.31 |
Copy On Write는 어떤 방식으로 동작할까? (0) | 2023.10.31 |