[스위프트 기초] 11. 옵셔널 추출

Seoyoung Lee·2022년 2월 24일
0


2021년 11월 17일에 공부한 내용입니다.

1. 옵셔널 추출(Optional Unwrapping)이란?

  • 옵셔널에 들어있는 값을 사용하기 위해 꺼내오는 것이다.
  • 옵셔널 방식
    • Optional Binding: 옵셔널 바인딩
    • Force Unwrapping: 강제 추출

2. Optional Binding

  • 옵셔널의 값을 꺼내오는 방법 중 하나
  • nil 체크 + 안전하게 값을 추출하는 방식
  • 옵셔널 안에 값이 들어있는지 확인하고 값이 있으면 값을 꺼내온다.
func printName(_ name: String) {
    print(name)
}

var myName: String? = nil

printName(myName)
// 전달되는 값의 타입이 다르기 때문에 컴파일 오류 발생
// 옵셔널(myName)은 일반 String 타입과 다르게 취급된다.

if-let

var myName: String! = nil

if let name: String = myName {
    printName(name)
} else {
    print("myName == nil")
}
// name 상수는 if-let 구문 내에서만 사용 가능하다.
// 상수 사용범위를 벗어났기 때문에 컴파일 오류가 발생한다.
// printName(name)

// 쉼표(,)를 사용해 여러 옵셔널 변수들을 한꺼번에 바인딩할 수 있다.
// 모든 옵셔널에 값이 있을 때만 동작한다.
var myName: String? = "240"
var yourName: String? = nil

if let name = myName, let friend = yourName {
    print("\(name) and \(friend)")
}
// yourName이 nil이기 때문에 실행되지 않는다.

// yourName에 값을 할당해주면 정상적으로 실행된다.
yourName = "Beomgyu"

if let name = myName, let friend = yourName {
    print("\(name) and \(friend)")
}
// 240 and Beomgyu

3. Force Unwrapping (강제 추출)

  • 옵셔널에 값이 들어있는지 아닌지 확인하지 않고 값을 꺼내는 방식이다.
  • 만약 값이 없을 경우(nil) 런타임 오류가 발생하기 때문에 추천되지 않는다.
func printName(_ name: String) {
    print(name)
}

var myName: String? = "240"

// ! -> 옵셔널 타입의 값을 강제로 추출한다
printName(myName!) // 240

myName = nil

print(myName!)
// 강제 추출시 값이 없으므로 런타임 오류가 발생한다.

// 암시적 추출 옵셔널 형식은 처음 선언할 때부터 위를 가정하고 선언하는 것과 같다.
var yourName: String! = nil

printName(yourName) // !를 붙이지 않아도 암시적 추출 옵셔널 형식 값을 전달할 수 있다.
// 알아서 느낌표를 붙여준 것과 같다.
// nil 값이 전달되기 때문에 런타임 오류가 발생한다.
profile
나의 내일은 파래 🐳

0개의 댓글