[swift] 비강제 옵셔널과 암시적 추출 옵셔널의 차이점은 무엇인가요?

Swift에서 옵셔널은 값이 없을 수 있는 상황에 대처하기 위해 사용됩니다. 비강제 옵셔널과 암시적 추출 옵셔널은 옵셔널 타입의 두 가지 서브타입입니다.

  1. 비강제 옵셔널 (Non-Forced Optional) 비강제 옵셔널은 값이 있을 수도 없을 수도 있는 옵셔널입니다. 변수 또는 상수의 타입 뒤에 물음표(?)를 붙여 나타냅니다. 값이 있을 경우 옵셔널을 해제하여 사용할 수 있고, 값이 없을 경우에는 nil을 가지게 됩니다.

예시:

var optionalValue: Int? = 5
print(optionalValue) // 출력 결과: Optional(5)

optionalValue = nil
print(optionalValue) // 출력 결과: nil

비강제 옵셔널은 값이 없거나 값이 있는 두 가지 상황을 모두 다루기 위해 사용됩니다. 값이 없을 경우에도 예외가 발생하지 않고 안전하게 처리할 수 있습니다.

  1. 암시적 추출 옵셔널 (Implicitly Unwrapped Optional) 암시적 추출 옵셔널은 값이 처음 할당된 이후에는 항상 비강제적으로 사용할 수 있는 옵셔널입니다. 변수 또는 상수의 타입 뒤에 느낌표(!)를 붙여 나타냅니다.

예시:

let implicitlyUnwrappedValue: String! = "Hello, World!"
print(implicitlyUnwrappedValue) // 출력 결과: Hello, World!

implicitlyUnwrappedValue = nil // 오류 발생: 암시적 추출 옵셔널은 한번 할당된 이후에는 nil로 변경할 수 없음

암시적 추출 옵셔널은 강제 언래핑 없이도 값에 접근할 수 있도록 하는 편의 문법입니다. 이는 보다 간편한 코드 작성에 도움이 되지만, 값이 nil인 경우에 접근하면 런타임 오류가 발생할 수 있습니다. 따라서, 암시적 추출 옵셔널을 사용할 때에는 주의가 필요합니다.

이렇게 비강제 옵셔널과 암시적 추출 옵셔널은 옵셔널의 사용 상황에 따라 선택하여 사용하면 됩니다. 값이 있을 수도 없을 수도 있는 상황인 경우에는 비강제 옵셔널을 사용하고, 값이 초기화된 이후 계속해서 사용될 경우에는 암시적 추출 옵셔널을 고려해 볼 수 있습니다.

추가 자료: The Swift Programming Language - Optionals