[Swift] 옵셔널에 대해 알아보자!

zooneon·2020년 10월 14일
0

Swift 기본 문법

목록 보기
2/14

본 내용은 '스위프트 프로그래밍' 책을 학습한 후 이를 바탕으로 작성한 글입니다.

옵셔널이란 ?

- 옵셔널은 스위프트의 특징 중 하나인 안정성을 문법으로 담보하는 기능이다.
- 옵셔널은 값이 있을 수도, 없을 수도(nil)를 나타내는 표현이다.

옵셔널 사용

  • 옵셔널로 선언된 곳에서만 nil을 할당할 수 있다.(일반 변수 또는 상수에 nil을 할당하면 컴파일 오류 발생!)
  • 옵셔널 변수 또는 상수 등은 데이터 타입 뒤에 물음표를 붙여 표현해준다.
  • 함수에서 매개변수를 굳이 넘기지 않아도 될 경우 매개변수의 타입을 옵셔널로 정의할 수 있다.
var city: String? = "Seoul"
print(city)	//Seoul

city = nil
print(city)	//nil

옵셔널 추출

옵셔널이 아닌 변수에는 옵셔널 값이 들어갈 수 없으므로 추출해서 할당해주어야 한다.

강제 추출

  • 옵셔널 강제 추출 방식은 런타임 오류가 일어날 가능성이 제일 높은 방법이다.
  • 옵셔널의 값을 강제 추출하려면 옵셔널 값의 뒤에 느낌표를 붙여주면 강제로 값을 추출하여 반환한다.
  • 강제 추출시 옵셔널에 값이 없다면, 런타임 오류가 발생한다.
var food: String? = "pizza"
var myFavoriteFood: String = food!

print(myFavoriteFood)	//pizza

food = nil
myFavoriteFood = food!	//런타임 오류

옵셔널 바인딩

  • 옵셔널 바인딩은 옵셔널에 값이 있는지 확인할 때 사용한다.
  • 옵셔널에 값이 있다면 옵셔널에서 추출한 값을 상수나 변수로 할당해서 사용할 수 있도록 해준다.
  • 옵셔널 바인딩은 if 또는 while 구문 등과 결합하여 사용할 수 있다.
var myName: String? = "zooneon"

//상수에 할당
if let name = myName {
	print("My name is \(name)")
} else {
	print("myName == nil")
}
//My name is zooneon

//변수에 할당
if var name = myName {
	name = "mike"
	print("My name is \(name)")
} else {
	print("myName == nil")
}
//My name is mike

암시적 추출 옵셔널

  • 암시적 추출 옵셔널은 nil을 할당해줄 수 있는 옵셔널이 아닌 변수나 상수를 사용할 때 사용한다.
  • 암시적 추출 옵셔널을 사용하려면 타입 뒤에 느낌표를 사용하면 된다.
  • 암시적 추출 옵셔널로 지정된 타입은 일반 값처럼 사용할 수 있으나, 옵셔널이기 때문에 nil도 할당할 수 있다.
  • nil이 할당되어 있을 때 접근을 시도하면 런타임 오류가 발생한다.
var myPhone: String! = "iPhone"
print(myPhone)	//iPhone

myPhone = nil

if let phone = myPhone {
	print("My phone is \(phone)")
} else {
	print("myPhone == nil")
}
//myPhone == nil
profile
블로그 이전했습니다. https://blog.zooneon.dev

0개의 댓글