본문 바로가기

iOS/Swift

Swift) Optional 부수기 (4) Optional Unwrapping - IUO (옵셔널 묵시적 추출)

 

안녕하세요 소드립니당 🌝

어김없이 퇴근하고 포스팅 하러 왔어여

 

오늘은 약속이 있어서

후딱 쓰고 갈거기 때문에 내용이 짧아여

물론 길게 할 내용이 아니라서

짧게 가겠음

 

오늘 공부할 내용은 바로

 

IUO(Implicitly Unwrapped Optional)

 

우리 말로

 

옵셔널 묵시적(암시적) 추출

 

 

ㅇㅣ랍니당!!~~~~

사실 두 세줄 정도로 끝날 설명인데

ㄴㅐ가 워낙 설명충이기도 하구... /_\

그리고 내 성격상 스치는 개념 하나라도 확실히 짚고 가고 싶어해서

별도로 포스팅 합니댱...

 

 

 

 

 

 

1. IUO

 

이전에 배웠던 Optional Unwrapping에는

 

강제추출

옵셔널 바인딩

 

이 있었음

 

이 Optional Type의 값을 사용할 땐 어떻게 했냐면,

 

 

 

 

이렇게

옵셔널 타입인 표현식을 강제로 추출해 내거나 

 

Non-Optional Type의 상수에 바인딩하는 식으로 사용해왔었음

 

 

.

 

근데 이번에 배우는 

IUO는 묵시적 추출임

 

무슨 말이냐?

 

별도의 추출하는 과정을 거치지 않아도 

자동으로 옵셔널이 해제되는 것임

 

어떻게 쓰는지 Syntax부터 고고

 

 

 

자 이런 식으로

 

변수나 상수를 선언할 때

기존 Optional Type을 선언할 때 처럼 Type 뒤에 ?를 붙이는 것이 아닌,

Type 뒤에 !를 붙임

 

 기존 옵셔널을 선언하는 방식이 비슷해 보이지만 다른 것임

 

 

 

 

 

이렇게 말이지

 

그럼 IUO는 옵셔널 타입이 아닐까?

 

 

 

 

아니 (단호)

옵셔널 타입임

 

 

IUO도 Optional Type으로 선언하는 방법 중 하나임

근데 Non-Optional Type으로 처리되어야 할 때 값을 자동으로 추출해줌

 

 

띠용?

자동 추출?? Optional Type의 값을 자동 추출해 준다구?????/

 

그러면 다음 구문의 결과값은

 

 

 

 

자동으로 추출해줄 테니까 4가 된단 말인가!!!! 🌚

그럼 개짱인거 아닌가!!! 옵셔널 바인딩 왜씀!?!!!

 

 

 

 

 

 

어림도 없지 ㅋ

 

모야모야 자동 추출해준다면서 왜 여전히 옵셔널 타입이야;;

왜냐면 아무 때나 자동 추출하지 않음

 

특정 조건일 때만 강제 추출함ㅎㅎ

 

자 다음과 같이 

 Non-Optional Type인 num2에  Optional Type인 num을 넣어볼 것임

 

 

 

 

원래 우리가 알던 옵셔널 선언은 에러를 뱉어냄

왜냐? Optional Type을 Non-Optional Type에 대입하고 있으니까

(Optional Binding을 통해서 넣어야 함)

 

그치만 IUO는 위 구문이 가능함

 

실제로 num2엔

 

 

 

 

num이 Unwrapping 된 값인 4가 들어가 있음

 

 

 

IUO를 쓴다고 원하는 때에 다 자동으로 값이 Unwrapping이 되는 것이 아님

Optional Type을 Non-Optional Type에 대입할 때  별도의 추출 과정 없이 대입이 가능한 것임

 

그 외에 또 언제 자동 추출가능한진 모르겠3

 

 

 

 

 

 

 

2. IUO도 강제 추출이다

 

묵시적 추출이라고 해서

친절하게 추출해주진 않음

 

얘도 강제추출임

 

따라서 다음과 같이 값이

 

 

 

 nil인 경우에 묵시적 추출을 할라고 하면

 

 

 

에러가 발생해염

머야..;;; 옵셔널 타입인 이유가 nil을 지정하기 위해서인데

값이 무조건 있을 경우에만 IUO 사용할 수 있단거야?

왜 사용하는 거야;;?

 

 

 

 

 

3. 언제, 왜 사용 하냐면

 

여러분 iOS를 한 번이라도 건드려본 사람이라면

IUO는 매일매일 우리 옆에 있었음

 

IBOultet을 사용할 때 바로 IUO를 쓰걸랑

 

 

 

 

 

이렇게 말이지

 

 

뭐 IUO는

 

프로퍼티 지연 초기화

 

를 하기 위해 사용한다 함

 

왜 프로퍼티 지연 초기화에 사용하는지는

나중에 좀 더 공부하고 포스팅 하겠음

 

근데 우리가 직접 IUO를 코딩할 일은 거의 없고!!!!

보통 두 가지 경우에 만나게 됨

 

1. IBOutlet

2. API에서 IUO를 return 한 경우

 

이 경우 외엔

그냥 안전하게 Optional Binding을 쓰는 것을 매우매우 추천 드림

강제 추출이라는 위험성이 있기 때문이지

 

 

걍 이론만 알아두고

웬만해선 사용하지 마세염~ ㅎㅎ

 

 

 

 

 

 

 

 

.

.

.

 

가벼운 내용 끝 :-)

피드백 환영입니다 🌝



Calendar
«   2024/05   »
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
최근 댓글
Visits
Today
Yesterday