옵셔널 바인딩(optional binding)이란? (if)

devapploper·2021년 1월 30일
0

스위프트 zero to hero

목록 보기
4/10

옵셔널 바인딩은, 한글로 의역하면 "선택적 결합" 으로 해석할 수 있다.

그런데 이렇게 이해하는 것보다는, "옵셔널을 열어봤는데 값이 들어있으면 이 변수에 할당한다"로 이해하는 편이 더 이해하기 쉽다.

길을 걷고 있다고 가정해보자. 바지의 주머니 쪽에 뭔가가 있는 듯한 느낌이 든다. 어제 편의점에 들렀다가 받은 거스름돈 300원이 있을 수도 있고 없을 수도 있다. 그러다 길을 걷고 있다가 100원을 주워서 주머니에 넣었다. 주머니 속의 돈은 얼마일까? 이것을 옵셔널 바인딩을 사용해서 나타내보았다.

var pocketMoney: Int? = 300

if let unwrappedPocketMoney = pocketMoney { // (A)
	pocketMoney = unwrappedPocketMoney + 100 // (B) 
} else {
	print("pocketMoney가 nil이면 이 문구가 출력된다.") // (C)
	pocketMoney = 100
}

옵셔널 바인딩은 if-else 문과 유사하다.

(A) 에서 옵셔널 변수 pocketMoney 를 unwrappedPocketMoney 변수에 할당한다. 만약 값이 들어있으면, 옵셔널이 언래핑 되어 unwrappedPocketMoney에 30이란 값이 할당될 것이다. 그리고 if 문 안의 코드 (B)를 실행한다. 그런데 반대로 pocketMoney에 값이 들어있지 않고 nil 이라면 else 문 안의 코드가 실행된다.

여기서 중요한 것은, unwrappedPocketMoney는 if 문 내부의 스코프에서만 사용이 가능하다는 점이다. if 문 밖의 스코프에서는 unwrappedPocketMoney 가 존재하지 않는다.

하나의 if 문에 여러개의 옵셔널 바인딩을 할 수도 있다. 이때 쉼표(,)는 AND (&&) 연산자와 같이 작용해서 하나의 옵셔널 바인딩이 nil으로 처리되면 해당 if 문 내부의 코드는 실행되지 않는다.

var leftPocketMoney: Int? = 100
var rightPocketMoney: Int? = 300
if let leftPocketMoney = leftPocketMoney, 
		let rightPocketMoney = rightPocketMoney {
		print("동전의 총합은: \(leftPocketMoney + rightPocketMoney + 100)원")
}

옵셔널에 대한 7가지 개념

  1. force unwrapping ✅
  2. optional binding - if ✅
  3. optional binding - guard
  4. nil coalescing
  5. optional chaining
  6. implicitly unwrapped optional
  7. optional pattern
profile
app 을 dev 하는 developer. devapploper 입니다

0개의 댓글