Swift

Swift) 옵셔널(Optional)

나태한개발 2024. 4. 29. 20:14

알고리즘 문제를 풀던도중 다른사람들 코드에 느낌표(!) 가 많이 보였다.

이게 뭔지 궁금해서 찾아보던중 스위프트는 옵셔널 타입이란 타입이 존재 하는것을 알게 되었다.

 

옵셔널이란?

nil(값이 없음) 이란 값을 가질수 있는 타입이라고 한다.

오류대신 nil 을 반환함으로써 안정성을 높인다고 한다.

 

일반적인 자료형에 nil 이란 값을 넣으려고 하면 오류가 난다.

옵셔널 타입을 선언하는 방법은 타입 뒤에 물음표(?) 를 붙여 주면 된다.

var nonOptioanl: String 
nonOptional = nil //오류

var optional: String?
optional = nil //오류 안남

옵셔널 사용법

String 이라도 옵셔널인지 아닌지에 따라 다른 타입이 된다.

선언 후 타입을 출력해보면 알수 있다.

var nonOptional: String
var optional: String?

print(type(of:nonOptional)) //String
print(type(of:optional)) //Optional<String>

 

이러한 옵셔널 타입을 사용하려면 추가 작업이 필요하다.

추가작업에는 조건이 있는데

작업하고자 하는 값이 nil 이면 안된다는것이다.

 

if let

값을 사용 하고 싶을때는 선언한 nonOptional 변수를 사용하면 된다.

let optional: Int? = 10

if let nonOptional = optional {
	print(nonOptional) //optional 이 nil 이 아니면 실행한다. (10 반환)
} else {
	print(optional) //optional 이 nil 이면 실행한다. (nil 반환)
}

 

 

같은 변수명을 사용하고 싶으면 똑같이 지정해줘도 된다.

let optional: Int? = 10

if let optional = optional {
	print(optional) //optional 이 nil 이 아니면 실행한다. (10 반환)
} else {
	print(optional) //optional 이 nil 이면 실행한다. (nil 반환)
}

 

단 if 문 밖에서는 사용 불가

let optional: Int? = 10

if let optional = optional {
	print(optional) //optional 이 nil 이 아니면 실행한다. (10 반환)
} else {
	print(optional) //optional 이 nil 이면 실행한다. (nil 반환)
}

print(optional) //-사용불가-

 

guard let

if let과 비슷하지만 값이 nil 일때 그냥 함수를 종료 시켜버린다.

let optioanl: String? = "승원이는 전설이다."

guard let nonOptional = optional else {
	return //값이 nil 이면 함수 종료
}

print(nonOptional) //승원이는 전설이다. 출력 if let 과 다르게 guard let 구문 밖에서 사용가능