• Feed
  • Explore
  • Ranking
/
/
    🦅 Swift

    [Swift] 옵셔널(Optionals) 이해하기 – 언래핑, 강제 언래핑, 옵셔널 바인딩

    Swiftios
    지
    지성
    2025.02.24
    ·
    5 min read

    Swift는 안전한 프로그래밍을 위해 nil 값을 허용하는 타입을 옵셔널(Optional)로 제공한다.

    옵셔널을 올바르게 사용하면 런타임 크래시를 방지하고 안정적인 코드를 작성할 수 있다.

    옵셔널(Optionals)이란?

    • 옵셔널은 값이 존재할 수도 있고 nil일 수도 있는 타입

    • 옵셔널을 사용하면 값이 없을 가능성을 표현할 수 있음

    var name: String? = "춘장" // 옵셔널 변수
    var age: Int? = nil // 값이 없을 수도 있음

    ?을 사용하여 변수에 nil을 저장할 수 있도록 선언

    옵셔널의 필요성

    옵셔널이 없으면 런타임 크래시 발생 가능

    var name: String = "메주"
    name = nil // 컴파일 에러 (Swift는 nil을 허용하지 않음)

    옵셔널을 사용하면 안전한 코딩 가능

    var name: String? = "감태"
    name = nil // 정상 작동 (옵셔널이므로 nil 저장 가능)

    옵셔널 언래핑(Unwrapping)이란?

    • 옵셔널 값을 사용할 때는 nil인지 확인 후 값을 꺼내야 함

    • 언래핑을 하지 않으면 직접 사용 불가능

    var name: String? = "춘장"
    print(name.count) // 컴파일 에러 (옵셔널은 직접 사용 불가)

    해결 방법 → 언래핑(Unwrapping) 필요

    옵셔널 언래핑(Unwrapping) 방법

    강제 언래핑(Forced unwrapping, !)

    강제 언래핑 시 nil일 경우 크래시 발생

    var name: String? = nil
    print(name!) // Fatal error: Unexpectedly found nil while unwrapping an Optional value

    nil이 아님을 확신할 때만 사용

    var name: String? = "메주"
    print(name!) // "메주"

    옵셔널 바인딩(Optional Binding, if let)

    옵셔널 값이 존재할 때만 안전하게 사용 가능

    var name: String? = "감태"
    
    if let unwrappedName = name {
        print("이름: \(unwrappedName)") // "이름: 감태"
    } else {
        print("이름이 없습니다.")
    }

    옵셔널 바인딩(guard let)

    함수 내부에서 조기 종료(Early Exit)할 때 유용

    func greet(_ name: String?) {
        guard let unwrappedName = name else {
            print("이름이 없습니다.")
            return
        }
        print("안녕하세요, \(unwrappedName)님!")
    }
    
    greet("춘장") // "안녕하세요, 춘장님!"
    greet(nil) // "이름이 없습니다."
    • guard let은 옵셔널 값이 없을 경우 즉시 return하여 함수 실행을 중단할 수 있음

    • if let보다 코드 가독성이 좋음

    옵셔널 체이닝(Optional Chaining)

    옵셔널이 연속적으로 연결될 때 안전하게 접근 가능

    class Person {
        var pet: String?
    }
    
    let person = Person()
    print(person.pet?.count) // nil (크래시 없이 안전하게 실행됨)
    • ?.을 사용하면 값이 존재할 때만 실행됨

    • nil일 경우 실행되지 않고 nil 반환 → 크래시 방지

    기본 값 제공(?? – Nil-Coalescing Operator)

    옵셔널 값이 nil일 경우 기본값을 제공하는 방법

    var name: String? = nil
    print(name ?? "Unknown") // ✅ "Unknown"

    옵셔널을 사용할 때 주의할 점

    1. 강제 언래핑(!)은 최대한 피해야 함

    2. if let, guard let을 활용하여 안전하게 사용

    3. 옵셔널 체이닝(?.)을 사용하여 연속적인 속성 접근

    4. 기본값(??)을 활용하여 nil 방지







    - 컬렉션 아티클