Swift #6: 옵셔널

발행: (2025년 12월 10일 오전 04:29 GMT+9)
3 min read
원문: Dev.to

Source: Dev.to

옵셔널

때때로 변수에 값이 없음을 표시해야 할 필요가 있습니다. 이런 경우 Swift는 ? 수식자를 제공하여 모든 데이터 타입을 옵셔널로 만들 수 있습니다. 옵셔널 변수는 값을 가질 수도 있고 비어 있을 수도 있습니다(nil 값).

var result: Int? // 기본값은 nil
result = 1
result = nil

암시적 언래핑 옵셔널 (Implicitly Unwrapped Optionals)

어떤 경우에는 옵셔널 변수가 사용될 때 항상 값을 가지고 있지만, 초기값을 무엇으로 설정해야 할지 모를 때가 있습니다. 이런 옵셔널 변수는 ? 대신 ! 로 선언되며, 표현식 안에서 사용할 때는 반드시 값이 있다고 간주됩니다.

var x: Int!
x = 3
var result = x * 2 // 6

값을 읽을 때 다시 ! 를 사용할 필요가 없습니다.

옵셔널 언래핑

강제 언래핑 (Forced unwrap)

옵셔널이 nil이 아님을 100 % 확신할 때만 ! 로 값을 추출할 수 있습니다.

let optionalValue: Int? = 5
let value = optionalValue! // value: Int = 5

옵셔널 바인딩 (if let/var, guard let/var)

옵셔널이 nil이 아닌지 확인하고 안전하게 사용하려면 Swift는 옵셔널 바인딩 구문을 제공합니다.

var optionalValue: Int? = 5
if let value = optionalValue {
    print(value)
}
if var value = optionalValue {
    print(value)
}

같은 이름 재사용

var value: Int? = 5
if let value = value {
    print(value)
}
if var value = value {
    print(value)
}

Swift 5.7부터는 옵셔널 바인딩에서 선언하는 상수·변수 이름이 옵셔널 자체와 동일할 경우 구문을 간략화할 수 있습니다:

var value: Int? = 5
if let value {
    print(value)
}
if var value {
    print(value)
}

guard와 함께 사용

guard let value else {
    return
}
guard var value else {
    return
}

추가 조건

var value: Int? = 5
if let value, value > 3 {
    print(value)
}

참고: 이름이 같더라도 옵셔널 바인딩에서 만든 상수·변수와 원본 옵셔널은 메모리 상에서 별개의 객체입니다.

옵셔널 체이닝

let optionalName = optionalValue?.name

널 병합 연산자 (??)

옵셔널이 nil일 경우 기본값을 반환합니다.

let value = optionalNumber ?? 0

패턴 매칭 (case let)

let optionalValue: Int? = 77
switch optionalValue {
case let value?:
    print(value)
case nil:
    print("nil")
}
Back to Blog

관련 글

더 보기 »

Swift #7: 튜플

Tuple은 하나 이상의 값(동일하거나 서로 다른 타입)을 그룹으로 포함합니다. 일시적이거나 임시적인 값을 저장하는 데 유용합니다, 비록 …