Swift

[Swift] Optional Unwrapping (1) - 강제 추출 (Forced Unwrapping)

띵지니어 2024. 1. 11. 21:12

https://thingjin.tistory.com/entry/Swift-Optional-%EA%B0%9C%EB%85%90-%EC%95%8C%EC%95%84-%EB%B3%B4%EA%B8%B0-nil-%EC%A0%95%EC%9D%98

[Swift] Optional 개념 알아 보기, nil 정의

Optional Swift를 조금이라도 접해본 분들은 많이 들어봤을 옵셔널!! 에 대해서 알아 보기로 해요!!! 정의 : 래핑 된 값(Wrapped) 또는 값의 부재(absence)를 나타내는 타입이에요~ 애플은 정의를 너무 어렵

thingjin.tistory.com


⬆️⬆️ 지난 시간 Optional 개념


지난번에 옵셔널 타입에 대해 알아봤어요
지난 포스팅 마지막에 옵셔널 값을 확인할 때, Optional("지수")를 확인하셨을까요?
하지만 그 값을 사용하려면 옵셔널 타입(Optional("지수"))Non-Optional Type인 ("지수")로 언래핑 해주는 과정이 필요해요

이번 시간에는 옵셔널 타입의 값을 사용하기 위한 언래핑(Unwrapping) 과정을 알아보려고 해요.

시작 전에

Unwrapping 이 뭐예요?


말 그대로 값을 옵셔널을 벗겨서 값을 추출을 하는 거예요

천천히 설명해 볼게요

이렇게 girlFriend 를 선언했고, 저는 girlFriend 의 값을 사용하고 싶어요

여자친구 이름이 어떻게 Optional("지수") ..?

여기까지는 저번 포스팅에서도 알거에요


Optional("지수")"지수" 로 사용을 하고 싶을 때 이 과정을 Unwrapping 한다고 해요

자 이제 본격적으로 값을 벗기는 과정 중 (1) 강제 추출 에 대해 설명할게요


 

Unwrapping - (1) 강제 추출 (Forced Unwrapping)

 
말 그대로 강제로 추출을 하는 거에요

nil이 아닌, 값이 있다는 것을 확신하고 강제로 값을 추출하는 방법이에요

 
확신 ..? 강제 ..? 라는 단어가 프로그래밍에서 좋진 않죠?

일단 사용 방법부터 알아볼게요

사용할 옵셔널 변수 뒤에 느낌표(!) 만 붙이면 강제 추출이 가능해요.

! 는 Swift에서 강제 추출 연산자예요 (물론 Bool 변수 Not으로도 사용)
사용하기 정말 쉬워요

girlFriend!

이렇게 사용하면 됩니다.
끗.

하지만 강제 추출은 Swift에서 추천하지 않는 방법이에요


무슨 이유 때문일까요?
바로 프로그램 도중(런타임)에 nil 로 되는 로직이 있을 수 있기 때문이에요


자 이제 값이 없는 nil 인 경우에 강제 추출을 사용하면 어떻게 될까요?

프로그램이 종료가 돼요
즉 앱이 비정상적으로 꺼진다는 말이에요
특히나 런타임 때 발생을 하는 에러이면, 사용자가 앱을 사용하는 도중에 꺼진다고 생각하면 돼요

왜 앱이 꺼지나요?

nil 은 Optional 타입이 아니라 값이 없음을 나타내는 값이기 때문이에요!!

Optional<nil>이라는 건 존재하지 않아요 nilnil 일뿐이에요.

그래서 진짜 웬만하면 강제 언래핑은 절대 사용하지 않아요

위처럼 중간에 nil 이 된다면 앱이 잘 실행되다가 런타임 에러로 작동을 해요 ㅠ
지금은 정말 짧은 코드인데, 만 줄.. 백만 줄 넘으면 큰 이슈가 될 거예요

이러한 에러를 방지하기 위해 강제 추출은 99% 사용하지 않아요!


근데도 한 번 정도 써보고 싶다! 그러면

if 문을 통해 해결을 하면 돼요
여기서 nil 이 아니다 (girlFriend != nil), 이 부분이 의미하는 건 값이 있는 경우를 의미해요
반대로 nil 인 경우(else)는 값이 없는 경우를 의미해요

따라서 이렇게 구현 하면 앱의 종료 가능성이 적어지고, 좀 더 안전하게 코드를 구현할 수 있어요

nil 일 경우도 잘 처리가 되는걸 볼수 있어요

하지만 옵셔널 값을 벗길 때 이렇게 사용하는 경우는 거의 없다고 생각하면 돼요!
우리는 옵셔널 바인딩이라는 문법을 많이 사용하게 될 거니까요 ㅎㅎ

 


Unwrapping 과정에서 첫 번째 강제 추출에 대해 포스팅을 해봤고, 주의사항과 사용법을 알아봤어요

강제 추출은 웬만하면 지향하지 말아야 합니다 !!

다음 포스팅에서는 Swift의 꽃🌸 옵셔널 바인딩으로 찾아뵐게요 !
 
감사합니다 🫠