Swift에서 옵셔널은 값이 있을 수도 있고, 없을 수도 있는 경우를 나타내는 특별한 타입입니다. 옵셔널은 Swift의 안정성을 높이는 데 중요한 역할을 합니다. 이 글에서는 옵셔널의 다양한 사용법을 소개합니다.

Optional이 필요한 이유

명시적인 nil 가능성: 옵셔널 타입은 값이 'nil'일 수 있다는 것을 명시적으로 표현합니다.
반면, 옵셔널이 아닌 타입에는 'nil'이 들어올 수 없기 때문에.

옵셔널의 두 가지 주요 형태

1.암시적 추출 옵셔널 (Implicitly Unwrapped Optionals, IUO): Int!와 같이 타입 뒤에 느낌표를 붙여 사용합니다.

2.일반 옵셔널: Int?와 같이 타입 뒤에 물음표를 붙여 사용합니다.

옵셔널 사용법

1.Force Unwrapping (강제 추출)

struct Cat {
    let name: String = "Navi"
}

var maybeCat: Cat? = Cat()
print(maybeCat!.name) // Navi

maybeCat = nil
print(maybeCat!.name) // !!error!!

!를 사용하여 옵셔널의 값을 강제로 추출할 수 있지만, 값이 'nil'인 경우에는 런타임 에러가 발생합니다.

2.Optional Binding (옵셔널 바인딩)

if let
let optionalNumber = Optional(10)

print("추출 하기 전 : \(String(describing: optionalNumber))")

if let num = optionalNumber {
    print("추출 성공 : \(num)")
} else {
    print("바인딩에 실패")
}
guard let
func test() {
    let optionalNumber: Int? = 3

    guard let number = optionalNumber else {
        return
    }
    print("optionalNumber : \(optionalNumber)")
    print("number : \(number) ")
}

test()

if let과 guard let을 사용하여 안전하게 옵셔널 값을 추출할 수 있습니다.

3. Implicitly Unwrapped Optionals (IUO)

func main() {
    let optionFruit : String = "orange"
    let unwrappedOptionFruit : String = "apple"
    let optionTwoFruit : String? = optionFruit
    let unwrappedTwoOptionFruit : String! = unwrappedOptionFruit

    print(optionTwoFruit!)
    print(unwrappedTwoOptionFruit)
}

IUO는 옵셔널을 사용할 때 매번 ! 연산자를 사용할 필요 없이 편리하게 사용할 수 있습니다.

4. Providing a Fallback Value (대체값 제공)

var 옵셔널: String?
var 기본값 = "기본값"

print("현재 저장된 값은 어떤 값인가요? \(옵셔널 ?? 기본값)")

?? 연산자를 사용하여 옵셔널 값이 'nil'일 경우 대체값을 제공할 수 있습니다.

위 예제 코드들은 새싹 iOS 팀원 Effie, 노움, Dan의 예제 코드가 포함되어있습니다. 🌱

참고하면 좋을거!

[Apple Developer - Optional]
https://developer.apple.com/documentation/swift/optional/

[옵셔널 체이닝 (Optional Chaining)]
https://bbiguduk.gitbook.io/swift/language-guide-1/optional-chaining

profile
안녕하세요 iOS 개발자를 꿈꾸는 새싹입니다.

1개의 댓글

comment-user-thumbnail
2023년 11월 23일

이해하기 쉬운 정리 잘 읽었습니다!!

답글 달기