티스토리 뷰

Swift

옵셔널(Optional) 정복하기 - 2장

swallow.iOS 2022. 5. 8. 22:57

안녕하세요! Swallow입니다!

오늘은 지난번에 포스팅하기로 한

⭐️ Optional Unwrapped ⭐️

옵셔널 추출하기에 대해서 작성해 보겠습니다!

항상 어떠한 조언, 충고 환영합니다!

시작하기에 앞서 이 글은

앨런 Swift 문법 강의야곰님의 스위프트 프로그래밍 책

공부하고 참고하여 작성하였습니다!

그럼 시작하겠습니다!

 

 

 

 

우선 Optional 타입으로 선언된 값을 사용하려면

이전 글에서도 말씀드렸다시피

보호막(포장지)을 벗겨낸 후 사용을 해야 합니다!

 

 

 

일반적으로 옵셔널로 선언을 했을 때

그림의 표현을 한번 보겠습니다!

옵셔널 선언시, 그림 설명

그러면 Optional로 선언된 값을 사용하고 싶은데

어떤 방식으로 벗겨내서 사용할 수 있을까요?

 

Optional Unwrapped 에는

크게 5가지로 구분되어 있습니다!

그중에 저희는 이번 포스팅에서

강제 추출(Forced Unwrapping)

대해서 알아보겠습니다!

 

첫 번째

강제 추출(Forced Unwrapping)

강제 추출이란?

옵셔널 타입으로 선언이 되어있는 표현식 뒤에

!(느낌표)를 붙이면 nil 이든 값이 있든

강제로 옵셔널 값을 추출합니다

 

 

강제 추출에 들어가기에 앞서

꼭!!! 꼭!!!

주의해야 할 포인트가 존재합니다

 

그것은 바로!!!!

강제 추출(Forced Unwrapping) 같은 경우

위에서 말씀드린 것처럼

nil이 존재하던지, 값이 존재하던지

강제 옵셔널 값을 추출하기 때문에

조심해야 합니다!!!!

왜냐하면 nil이 존재하는데, 그 값을 Unwrapping 한다면

에러가 발생합니다!

그렇기에 꼭 주의해서 사용하셔야 합니다!

 

이렇게만 말씀드리면 무슨 말인지 잘 이해가 되질 않으시겠죠?

강제 추출 예시와 주의점 보여드리겠습니다!

var name: String? = "swallow"
print(name)  // Optional("swallow")

위의 예시에서는 name 변수에 String?으로 선언을 하고

"swallow"라는 문자열을 할당하였습니다

그 후 출력을 해보면!!

당연히 Optional("swallow")가 출력이 되겠죠!!

 

자!

그러면 우리는 여기서, 위에서 말한 강제로 추출해주는!(느낌표)를 사용해 보겠습니다!

var name: String? = "swallow"
print(name!)  // swallow

오??

위에서 출력되는 것과는 다르게

swallow가 출력이 되네요?

 

 

오 이 자식! 😎

믿고 있었다고...!

싶겠지만... 그 믿음을 깨 드릴게요...!

var age: Int?  // nil
print(age!)  // 에러 발생

위에서 말씀드린 것처럼

옵셔널 선언 후 값을 할당하지 않으면 자동으로 nil이 할당이 되는데

그 녀석에게 접근해서 강제 추출하여 출력을 하려 한다??

괘씸한 놈!!!

바로 에러가 발생합니다!!

nil은 값이 없다가 아니고, 값이 없다를 나타내는 키워드라고 말씀드렸습니다

그리고 nil 자체가 값이 아니에요!!!

진짜 주의하셔야 합니다!

만약 nil 자체가 값이었다면, 당연히

Optional(nil)로 출력이 되었겠죠??

하지만 그냥 nil로만 출력이 됩니다

즉, 정리를 하자면

강제 추출로 nil이 할당된 옵셔널 타입을 벗긴다면

실제 메모리에 값이 존재하지 않기 때문에 에러가 발생하는 것입니다!!

 

 

그리고, 강제 추출(Forced Unwrapping)은

값이 있다고 확신이 들 때 사용을 해야 합니다!

 

혹시나 값이 있다고 생각해서 강제 추출을 사용했다가

위에 예시처럼 값이 없는 경우가 있을 수도 있기 때문입니다!

그러면 위에 말씀드린 것처럼 에러가 발생해서 치명적인 일이 발생하겠죠?

항상 주의해서 사용합시다!

 

강제 추출을 주의해서 사용하면..

너무 복잡할 거 같아요..라고 생각하실 수 있어요!

그럴 때 간단하게 사용할 수 있는 게 존재합니다!!

 

바로 if문을 통해서 값이 nil이 아니다 라는 것을 확인 후,

강제 추출하는 방법이 있어요!

그러면 에러 가능성이 없어지겠죠?

 

예시 한번 보겠습니다!

if name != nil {  // name 변수에 nil이 들어있지 않다면
    print(name!)  // name을 강제 추출해서 출력해라
}

// 콘솔창
// swallow

if문을 통해서 name이라는 변수에 nil이 들어있지 않다면

name을 강제 추출해서 출력해라 라는 코드를 작성했습니다!

 

어때요?

이 방법이라면, 에러도 발생하지 않고, 강제 추출을 사용할 수 있겠죠?

 

이번 포스팅에서는 Optional Unwrapped 방법 중

강제 추출(Forced Unwrapping)에 대해서

알아보았는데요!

다음 포스팅에서는 우아하고 더 안전하게 옵셔널을 벗길 수 있는!

⭐️ 옵셔널 바인딩 ⭐️

알아보겠습니다!

감사합니다!

 

항상 어떠한 피드백 환영입니다☺️

 

 

댓글