Swift는 다른 언어들과 달리 Optional 이라는 개념이 존재한다.
Optional은 nil을 사용할 수 있는 타입과 없는 타입을 구분하기 위함이며,
nil을 사용할 수 있는 Type을 Optional Type이라 부른다
여기서 nil인 경우는 '값이 없다' 라는 것을 의미한다.
그럼 예시를 들기위해 하나를 만들어볼게요.
Type뒤에 '?'를 붙여 생성할 수 있으며, 옆에 결과를 보니 nil로 출력되네요.
네, 변수 Type만 선언해놓고 변수 안에 값을 넣어주지 않았으니 당연히
"값이 없다" 라는게 맞고, 위에 Optional의 정의와 맞는 부분인거 같네요.
여기서 Type만 선언한 nameOptional에 값을 넣어볼까요?
Type을 미리 선언해놓고, 안에 값을 넣는것도 가능합니다.
이렇게 생성된 변수를 출력해보면 아래와 같이
옆에 저게 뭐죠...? Optional("a")로 출력되네요.
nameOptional의 Type은 String? 이기 때문에 안에 값이 들어 갔을 경우도 있고,
값이 안들어갈 수있는 상황도 있기 때문에 Optional Type으로 출력이 됩니다.
값을 다른곳에서 사용할 때는 Optional을 제거하고 사용해야할텐데
이러한 행동을 Optional Binding이라고 한다.
Optional Binding에는 3가지 방법이 있다.
1. Force unwrapping
옵셔널인 값을 강체로 추출하는것이다.
Optional인 값 뒤에 !를 붙여서 출력하는 방식인데, 항상 이 값은 Optional이 아니라는 의미로 !를 붙여 사용한다.
하지만 사용하지않는게 좋다.
예외가 없더라고 하더라도 강제적으로 추출을하면 생각하지 못한곳에서
문제가 발생하는 경우가 많기도하고, 다른 안전한 방법도 있으니 다른 방법을 사용하는것을 추천헌다.
2. if let 사용
nameOptional의 값이 nil인지 체크를 하고, 새로운 변수에 담아서 사용하는 방식이다.
하지만 이 방식은 해당 if문안에서만 가능하다.
3. guard let 사용.
guard는 보호한다는 의미 그대로 이 값을 보호하고있고, 아니면 return을 시키는 방식으로,
if let은 else구문으로 예외를 처리할 수 있지만
guard let은 예외가 발생하지 않도록 처리를 할 때 사용한다.
Optional의 개념과 Optional을 제거하는 방법 3가지에 대해 알아보았는데, 정말 언어와 소통하는 기분...?
?와 !를 통해 질문을 하고, 질문의 유무를 확인하기 위해 다양한 방법을 통해 처리할 수있다.
부족한 지식으로 설명을 드렸는데, 도움이 됐으면 좋겠습니다.
오늘도 빡코딩!
'Mobile > Swift' 카테고리의 다른 글
[SwiftUI] SwiftUI 문서 찍먹하기 (0) | 2024.11.11 |
---|---|
[Swift] RxSwift (0) | 2022.11.07 |
[Swift] Singleton Pattern 뽀개기 (0) | 2022.11.07 |