티스토리 뷰

Swift

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

swallow.iOS 2022. 5. 10. 23:49

안녕하세요! Swallow입니다!

이번 포스팅은 Optioanl Unwrapped 방법 중 비교적 간단한

⭐️ Nil-Coalescing ⭐️

관한 글입니다!

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

시작하기에 앞서 이 글은

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

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

그럼 시작하겠습니다!

 

 

 

닐 코얼레싱(Nil-Coalescing)이란?

사전적 의미로는

(더 큰 덩어리로) 합치다 라는 의미입니다!

Nil-Coalescing은 Optional Unwrapped 방법 중에서 비교적 간단합니다!

이전 포스팅에서 마지막 부분에서 조금

말씀드렸다시피, 기본값을 제공해주는 연산자입니다!

직접적으로 값을 벗겨내서 사용하는 게 아닌,

기본값을 제시해서 옵셔널을 벗겨내는 방법입니다!

 

 

Nil-Coalescing은 어떻게 사용방법은

??

물음표 두 개입니다!

옵셔널 표현식 뒤에 ??를 붙이고 그 뒤에 기본값을 제시하면 됩니다!

옵셔널 표현식 ?? 기본값

 

이런 설명보다는 바로 예시를 보시는 게 좋겠죠?

var dormitory: String? = "Gryffindor"

var harry = dormitory ?? "Slytherin"

위의 예시를 분석해 보자면

dormitory변수가 String? 타입으로 선언되어 있고, "Gryffindor"가 할당되어 있습니다

그리고 밑에 줄에서 Nil-Coalescing이 등장합니다!

harry변수에 할당을 하는데, 무엇을 할당을 하느냐!

dormitory변수에 값이 존재한다면

String? 타입인 "Gryffindor"의 옵셔널을 벗겨낸 후 harry에 할당합니다!

dormitory변수가 nil이라면

?? 뒤에 기본값으로 제시해준 "Slytherin"을 할당합니다!

 

이해가 조금 되시나요? 😀

 

쉬운 이해를 위해서 한 가지 예시를 더 보겠습니다!

var name: String? = "swallow"

var changeName = "안녕하세요 " + (name ?? "포켓몬스터 테일로") + "입니다!"
print(changeName) // 안녕하세요 swallow입니다!

name변수에 String? 타입으로 "swallow"가 할당되어 있습니다

밑에 줄에서 다시 Nil-Coalescing이 등장합니다!

name변수에 값이 존재한다면 Optional("swallow")에서 

내부에 있는 값을 자동으로 벗겨서

즉, "swallow"만 꺼내서

changeName변수에 할당을 해주기 때문에

print(changeName)을 실행하면

안녕하세요 swallow입니다! 가 출력이 됩니다!

 

name변수에 nil이 존재한다면

기본값으로 제시한 "포켓몬스터 테일로"가 할당이 되어서

print(changeName)을 실행하면

안녕하세요 포켓몬스터 테일로입니다! 가 출력이 됩니다!

 

어때요? 쉽죠?

 

그런데 Nil-Coalescing을 사용 시에 주의할 점

한 가지 알아두면 좋은 점이 있습니다!

 

우선 주의할 점

옵셔널로 정의한 타입과

기본값으로 제시한 타입이 동일해야 한다는 점입니다!

동일해야 한다는 말이 Optional까지 동일해야 한다는 말이 아니고,

단순히 String? 타입 일 때, 기본값도 String 타입이어야 한다는 말입니다!

즉, String? 타입으로 선언을 했을 때

기본값으로 Int, Double 타입 등을 줄 수 없고

오직 같은 타입을 주어야 합니다!

 

그리고 마지막으로

알아두시면 좋은 점

var dormitory: String? = "Gryffindor"

var harry = dormitory ?? "Slytherin"

위의 예시를 다시 보시면

과연 변수 harry의 타입은 무엇일까요?

바로!!

String 타입입니다!

 

오잉?

왜 String? 타입도 아니고 String 타입이지?라고 생각하실 수 있어요!

왜냐하면 Nil-Coalescing을 사용하면

옵셔널로 선언된  타입에 값이 존재하면,

옵셔널 값을 벗긴 후 할당을 하고

nil이 존재하면 기본값을 제공을 했기에

절대 nil이 할당될 일이 없습니다!

그렇기 때문에 옵셔널로 선언이 되질 않아요! 😁

 

재미를 위해, 한줄정리 그림 그려보았습니다!

 

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

닐 코얼레싱(Nil-Coalescing)에 대해서 알아보았는데요!

앞에서 배우신 내용보다는 비교적 간단합니다!

다음 포스팅에서는

⭐️ IUO(암시적 추출)⭐️

알아보겠습니다!

 

감사합니다!

 

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

댓글