이번엔 스위프트의 꽃이라고 할 수 있는
옵셔널을 배워보았다.
스위프트에서의 옵셔널은 가장 중요한
핵심이라고 해도 과언이 아니라고 한다.
이 옵셔널은 굉장히 중요한 개념이기 때문에
한번 배우고 끝이 아니라,
지속적으로 이 글을 낭독해 보길 바란다.
옵셔널
의미로는 옵션으로 들어갈 수 있다는 것을 말한다.
"이건 옵셔널 해"
"이건 옵션으로 들어갈 수 있는거야."
예시로 자동차의 옵션 중 자율주행을 꼽아볼 수 있다.
자율주행이라는 기능은 옵셔널이다.
이름 | 옵셔널 여부 | 기능 |
핸들 | 필수 | 방향을 조절한다. |
바퀴 | 필수 | 굴러가게 한다. |
창문 | 필수 | 창문을 열고 닫음. |
자율주행 | 옵셔널 | 자동으로 운전한다. |
핸들은 자동차의 옵션인가?
아니다 필수다.
기능은 방향을 조절해 주는것이고,
얘가 없다면, 방향을 조절 할 수 없다.
당연한거다.
핸들부터 창문은 자동차를
구성하는데 필수적인 기능이다.
그런데,
자율 주행은 옵셔널이다.
자동으로 운전을 해준다면 좋지만,
꼭 얘가 있어야만 자동차라고
부를 수 있는 건 아니기에
자율 주행은 옵셔널인 기능이다.
이런게 옵셔널인 기능인것이다.
그렇다면, 옵셔널이 필요한 이유를 정리해보겠다.
let name: String = "Stay_Jun"
이건 내 블로그의 이름이다.
그리고
let poodname = ""
이건 내가 지금 먹고 싶은 음식이 없기에
빈칸으로 넣어주었다.
어떠한 사람의 이름은 있어도
먹고 싶은 음식이 있을 수도 있고,
없을 수도 있는 값이다.
그렇기 때문에 poodname값을
모두에게 다 빈칸으로 받는 건
굉장히 비효율적이다.
그리고
저게 빈칸인지 비교를 해서
poodname가 없는지 별도로 확인하는 것도
굉장히 귀찮은 일이다.
말도 안되긴 하지만,
이름 자체가 공백일 수도 있다.
어떤식으로 옵셔널 하게 만드는가 하면
let poodname: String? = ""
타입 뒤에 "?" 를 붙여서 만들어 주면 된다.
정말 간단하다.
끝인가?

그렇다
저게 전부이다.
이렇게 어떤 타입뒤에
옵셔널이 붙어져 있다면
"얘는 옵셔널 하네?" 라고 보면 된다.
읽어 보면 poodname은
있을 수도 있고 없을 수도 있다는 것이다.
어려운가?
필자는 이걸 배우면서 굳이
그러면 왜... 위에서 그렇게 장황하게...
거창하게... 엄청 중요하다는 걸로 이야기를...
굉장히 큰 의문이 들었다..
처음에 공부할 때는 다 그런줄 안다고 한다.
조금 더 심화적으로 들어가 보자.
있으면 값이 있고, 없으면 nil 이다.
let poodname: String? = "Pizza"
Optional("Pizza")
이 문단에서는 현재 옵셔널을 표시하고
Pizza 가 있는 것을 알 수 있다.
그러면 얘는 값이 있는 옵셔널 값이다.
String? 에 아무것도 넣어 주지 않는다면,
let poodname: String? = "nil"
Nil
nil 이라는 없음 / nil은 없다라는 뜻이며 이는 약속이다.
즉, 초기값이 없다면 nil 이 들어가 있는 것이다.
nil은 없다는 뜻임을 잘 기억하길 바란다.
옵셔널 설명에 최고의 짤을 소개해본다.
휴지가 있는가 물어본다면,
둘다 휴지는 없다.
그런데,
왼쪽은 0만큼 휴지가 있는것이다.
리필이 되는 그런 휴지가 있다고 가정한다면,
1이 됐다가 10이됐다가 다시 0이 될수도 있다.
값이 변할 여지가 있다는 것이다.
없지는 않는다는 설명을
이렇게 장황하게 한것이다.
정말 없는 것은 nil 인것이다.
오른쪽엔 휴지가 있는가?
없다 진짜 아무것도 없다..
저러한 상태가 바로 nil인 것이다.
이러한 미묘한 개념의 차이를
이해해야한다는 것이다.
그렇다면 실습편으로 넘어가서 심화있게 다뤄보자.
'IOS > Swift-TIL' 카테고리의 다른 글
[Swift-TIL] 옵셔널 바인딩, 체이닝 - 옵셔널 값을 안전하게 사용해 보기 (이론편) (0) | 2024.10.22 |
---|---|
[Swift-TIL] 옵셔널 - 있을 수 있는 것 없는 것 (실습편) (0) | 2024.10.22 |
[Swift-TIL] 스위치 - 선택지를 사용해서, 케이스 별로 정리하는 방법 (실습편) (0) | 2024.10.17 |
[Swift-TIL] 스위치 - 선택지를 사용해서, 케이스 별로 정리하는 방법 (이론편) (0) | 2024.10.17 |
[Swift-TIL] 열거형 - 필요한 선택지를 만드는 방법은? (실습편) (0) | 2024.10.16 |