본문 바로가기

iOS/Swift

Swift) Optional 부수기 (2) Optional Unwrapping - 강제 추출(Forced Unwrapping )

안녕하세여 소드립니다 😱

맨날 퇴근하고 포스팅 하려고 딱 티스토리만 켜면

넘 배고프네연...

저녁 뭐먹징..

 

쨌든

늘 그랬듯 스위프트 포스팅은 

반말로 가보겠슴다

 

 

.

.

 

자 이번에 공부할 내용은

바로

 

Optional Unwrapping

 

에 대해 배워볼 것임

그리고 그 중 하나인

 

강제추출(Forced Unwrapping)

 

에 대해 배울 것임

 

 

 

 

1. Optional Unwraaping

 

자 이전 포스팅을 복습 해보겠음

Swift에서는 nil이라는 "값 없음"을 사용하려면

Optional이라는 것을 사용해야 했음

 

그리고 Optional로 선언된 자료형은

일반 자료형이 아닌 Optional로 한번 포장된

Optional 자료형이라 했음

 

간단한 예로

 

 

 

 

이렇게 Optional로 선언된 a라는 상수의 타입은

 

 

 

 

 

 

그냥 Int 자료형이 아닌, Optional Int 자료형임

 

따라서

 

 이 Optional 자료형을 사용하기 위해선

Optional이란 포장지를 까주고 써야 함

 

만약 안 까주면 어떻게 되냐고?

 

 

 

 

Optional Int Type인 a에 4라는 정수를 넣었음

그리고 이제 이 값을 사용하고 싶음

 

 

 

 

이런 식으로 말이지

그리고 myInfo를 출력해보면

 

 

 

 

 

우리 나이는 무려 옵셔널 4살임

 

이처럼 Optional은 포장지에 싸여있기 때문에

값을 사용하기 위해선

Optional 포장지를 까는 작업을 해줘야함

 

 

이 작업을 바로

 

Optional Unwrapping

 

이라고 함

 

 

 

위 그림처럼

Optional Unwrapping을 이용하면

Optional Type을 Non-Optional Type으로 변환활 수 있음

 

 

자,

이 Optional Unwrapping에 꼭 알아둬야 할 것이 있으니

 

Optional Unwrapping을 하기 위해선

절대 Unwrapping 하고자 하는 변수(상수)가 nil이면 안 된다

 

나 빨간 글씨 첨인듯

그만큼 중요함

 

무슨 소리냐

헷갈리시면 안 되는 게

nil은 값이 아님..!!!!

 

nil은 "값 없음"을 나타내는 것일 뿐,

nil을 어떠한 값이라고 생각하면 안됨

 

따라서 만약 값이 없으면 

nil이지 Optional<nil>이 아니란 말임

 

Optional은 값을 감싸는 것이지 

값이 아닌 nil을 감싸지 않음

 

예를 보면 이해가 쉬움

 

 

 

 

a엔 nil을 지정 했고,

b엔 4라는 숫자 리터럴을 지정했음

 

이 둘의 결과는

 

 

 

 

 

보이셈?

 

절대 

Optional(nil)이 아님

 

따라서

 

nil은 값이 없기 때문에

Optional이란 포장지도 없고

따라서 Optional이란 포장지를 까는

Unwrapping도 하면 안됨

 

만약 nil이 지정된 변수(상수)를 

Optional Unwrapping 하려고 하면

빨간 에러가 발생함

 

이 개념을 알아야 그 뒤 내용을 이해할 수 있음

 

 

자,

이 Optional Unwrapping을 하는 방법에도 여러 가지 방법이 있음

그중 가장 먼저 다뤄볼 방법은

오늘 포스팅의 내용인

 

강제 추출(Forced Unwapping) 방법임

 

 

 

 

2. 강제 추출(Forced Unwrapping)

 

옵셔널을 강제로 추출한다라..

어감이 살벌하지 않음?

 

강제라는 단어는 프로그래밍에서 절대 좋은 단어가 아니라 생각함

 

강제 추출이란 것은 

느낌 그대로

 

옵셔널에 값이 nil이건 말건

그냥 강제로 옵셔널을 벗겨버리는 것임

 

어? 근데 아까

nil이면 절대 옵셔널 해제하면 안 된됐자나?

 

ㅇㅇ 맞음

뒤에서 설명할 것임

일단 어떻게 사용하는지부터 보셈

 

 

이 강제추출 연산자는

 

! (느낌표)

 

를 이용함

 

Optional로 선언된 변수(상수)를 사용할 때

그 뒤에 !를 붙여주면 댐

 

아까 구문으로 예를 들면

 

 

이렇게 말이지

 

 

 

 

그러면 결과값은

 

 

 

 

 

내가 원하는

Optional이 해제된 값을 얻을 수 있음

 

 

오호.. 핵편한데?

그럼 앞으로 모든 옵셔널에 !를 붙여서 사용할 때마다 강제 해제 해버리면 되는거 아냐?

라고 생각할 수도 있겠지만

 

아까 말했듯

값이 없어서 nil 일 경우에도 옵셔널을 강제로 해제한다

 라는 특징을 생각하면

절대 절대 절대 위험한 짓임

 

다음과 같이 값이 없을 경우

옵셔널 강제 해제를 해보겠음

 

 

 

 

컴파일 에러 뜨잖음

 

근데 이게 컴파일 에러로 떠주면 고마운 거임

 

만약 런타임 에러로 떨어지면

세상에서 제일 무서운 버그인

비정상 종료 버그가 생기는 것임

😱

 

 

쨌든

 

그러면 값이 있는지 없는지를 확인해주고 쓰면 되지 않음?

 

 

 

 

 

 

뭐 이렇게 사용하면

 

 

 

 

 

문제없이 되긴 함

 

 

 

 

nil일 때도

 

 

 

 

else문으로 빠져서 잘 됨

 

 

근데!!

이 방법은 실제 프로그래밍에서 

사용하지 않음..

그냥 이런 방법도 있구나 알아 두기만 하면 댐

 

옵셔널 바인딩(Optional Binding) 이라는

안정적으로 Optional을 Unwrapping 하는 방법이 있거든

이 바로 다음 포스팅에서 배울 것임

 

 

 

 

 

3. 정리

 

정리를 해보자!!!

 

 Optional Unwrapping 

 

Optional Type의 값을 Non-Optional Type의 값으로

변환할 때 사용

 

주의

nil을 Unwrapping 하려 하면

치명적 오류가 발생한다

 

 

 강제 해제(Forced Unwrapping) 

 

Optional Unwrapping 의 여러가지 방법 중 한 가지

!를 이용해서 옵셔널을 강제 해제 시킨다.

 

주의

값이 없는 nil일 경우에도 옵셔널을 해제하려고 해서

자칫 잘못 사용하다간 큰 문제를 발생 시킬 수 있다

 

실제 프로그래밍에선 거의 쓸 일 없다 ^^

이런 것도 있구나 알아만 두자

 

실제 프로그래밍에서 대부분 사용되는 Optional Unwrapping 방법은

Optional binding 이라는 것이고

다음시간에 배워보자 😎

 

 

 

 

 

 

-배고파서 이만 끗-

 

 

 

오타 및 잘못된 내용 지적 환영



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