옵셔널(Optional)

장수빈·2024년 6월 5일

Swift문법

목록 보기
7/11

옵셔널은 지정된 타입에 값이 없을 가능성이 있을 경우에 사용하게 됩니다.

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// The type of convertedNumber is "optional Int"

예제의 convertedNumber는 Int가 되지 못할 가능성도 가지고 있기 때문에
type이 Optional Int가 됩니다.

var serverResponseCode: Int? = 404
// serverResponseCode contains an actual Int value of 404
serverResponseCode = nil
// serverResponseCode now contains no value

Optional type을 선언할때는 타입 뒤에 ?를 붙입니다.

nil

옵셔널에서 값이 없는 상태를 나타내는 "값"입니다.

var surveyAnswer: String?
// surveyAnswer is automatically set to nil

예시와 같이 옵셔널 타입에서 따로 값을 지정해주지 않게되면 nil값을 가집니다.




옵셔널 바인딩(Optional Binding)

옵셔널 바인딩 (optional binding) 은 옵셔널이 값을 포함하고 있는지 확인하고 값이 있는 경우 해당 값을 임시 상수 또는 변수로 사용할 수 있게 해줍니다.

if 구문 사용

if let <#constantName#> = <#someOptional#> {
   <#statements#>
}

guard 구문 사용

guard let <#constantName#> = <#someOptional#> else { <#statements#> ]

if 구문에서 옵셔널 바인딩으로 생성된 상수와 변수는 if 구문의 본문내에서만 사용 가능합니다. 반대로 guard 구문에서 생성된 상수와 변수는 guard 구문 다음에 코드에서 사용 가능합니다.

while 구문 사용

while let <#constantName#> = <#someOptional#> {
<#statements#> 
]


대체값 제공 (Providing a Fallback Value)

옵셔널 타입을 처리하는 다른 방법은 nil-결합 연산자 (??) 사용하여 기본값을 제공하는 방법입니다. 옵셔널에서 ?? 의 왼편이 nil 이 아니면, 값은 언래핑되고 사용됩니다. 그렇지 않으면 ?? 의 오른편에 값이 사용됩니다.

let name: String? = nil
let greeting = "Hello, " + (name ?? "friend") + "!"
print(greeting)
// Prints "Hello, friend!"

강제 언래핑 (Force Unwrapping)

프로그래머의 에러 또는 원치않는 상태와 같은 실패를 nil 로 표현하려면 옵셔널의 이름 뒤에 느낌표 (!) 를 추가하여 접근할 수 있습니다. 이것을 옵셔널의 값의 강제 언래핑 (force unwrapping) 이라고 합니다. nil 이 아닌 값에 강제 언래핑을 하면, 언래핑된 값을 결과로 얻습니다. nil 값을 강제 언래핑하면 런타임 에러가 발생합니다.

let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)

let number = convertedNumber!

guard let number = convertedNumber else {
    fatalError("The number was invalid")
}
profile
iOS 공부 이모저모 낙서장

0개의 댓글