[swift] optional

2023. 2. 16. 21:41👩🏻‍💻 ios 앱개발 ( swift )

728x90

🦴 optional

swift를 처음 배우는 사람들이 제일 혼란스러워하는 내용.. ( 매우 혼란스러워질 예정 )

 

 

🦴 optional이라는 개념은 어떤 상황에서 유용할까?

 

다음과 같은 상황을 보자

var name: String = "puang"

var dogName: String = "choco"

var carName: String = ?? // 차가 없다면 ? 

 

boolean 변수를 사용해서 자동차 유무를 확인하는 방식도 있지만, 존재하지 않을 수도 있는 변수에 대해서 복잡한 확인과정을 거치는 건 비효율적이다. swift는 이러한 상황을 다루기 위해   optional이라는 개념 제공.

 

 

nil   -   값이 없는 상황

 

박스에 물건이 들어있는 경우  =  optional에 value가 들어있는 경우

박스 = optional

박스에 15가 들어있는 경우 = optional에 15가 들어있는 경우

 

?    :   값이 있을 수도 있고 ~   없을 수도 있고~

import UIKit

//optional
var carName: String?
carName = nil
//차가 생겼다!
carName = "lamborghini"

 

 

여기까지 기본적인 optional에 대한 내용이다.

 

🦴 optional의 고급 개념 4가지

 

 - Forced unwrapping optional = 억지로 박스 열기

- Optional binding = 부드럽게 박스 열어보기

- Guard statement = 부드럽게 박스 열어보기 2탄 (feat. guard)

- Nil coalescing = 박스를 열었더니 값이 없으면 default 값을  줘보자

 

lamborghini가 나오길 기대했지만 carName은 optional형태이다.

문제 : 변수의 값이 나오는 게 아니라 optional형태(상자)가 나옴.

 

 

 - Forced unwrapping optional = 억지로 박스 열기

!  :   박스  강제로! 열기 (unwrapping) 

박스를 강제로 여는 행위는 최대한 지양해야함. 실무에서도 안쓰는 걸 추천

 

optional이라는 부수적인 표현이 안보인다.

 

박스 안에 아무것도 없는데 열었다면?

경고메세지 : 대충    '아무것도 없는데 함부로 열지 말라'   는 뜻

앱이 죽는 crash를  방지하기 위해서는 좀더 부드럽게 박스를 열어야 함.

 

- Optional binding = 부드럽게 박스 열어보기

박스에 value가 있을 때
빈박스일때

이 코드를 guard 를 이용해서 간단하게 만들 수 있다.

- Guard statement = 부드럽게 박스 열어보기 2탄 (feat. guard)

긴 코드가 들어오더라도 if 문 안에 중첩되지 않으므로 더 클린하게 코드를 짤 수 있다.

 

- Nil coalescing = 박스를 열었더니 값이 없으면 default 값을  줘보자

 

 

🦴 실습 예제

Q1. 최애 음식이름을 담는 변수를 작성하고 (String?), optional binding 을 이용해서 값을 확인해보기

Q2. 닉네임을 받아서 출력하는 함수를 만들어보기, 입력 파라미터 String?

 

'👩🏻‍💻 ios 앱개발 ( swift )' 카테고리의 다른 글

[swift] Closure  (0) 2023.02.22
[swift] Collection  (1) 2023.02.17
[ swift ] Function  (0) 2023.02.14
[swift] switch문  (0) 2023.02.13
[ swift ] for loop, import foundation, closedRange  (0) 2023.02.13