[IOS / Swift] Optional

서프로·2023년 3월 27일
0
post-thumbnail

What Optional?

IOS 개발을 하다보면 옵셔널 이라는 단어를 자주 듣게 됨.
옵셔널이란 값이 있을수도 있고 없을수도 있는 변수를 나타내는 타입임.

예를 들어, 문자열 변수를 선언하고 값을 할당한 후 이 변수를 출력하려고 할 때, 그 값이 nil일 경우 앱이 충돌할 수 있음. 이런 상황을 방지하기 위해 옵셔널 타입으로 변수를 선언하면 값이 nil일 때도 앱이 안전하게 동작할 수 있음.

How?

옵셔널 변수는 변수명 뒤에 물음표(?)를 붙여서 선언함.
물음표를 붙여 선언된 변수는 값이 있을 수도 있고 없을 수도 있으므로, 변수를 사용할 때에는 반드시 nil 여부를 체크해야 함.

var optionalString: String? = "Hello, world!"
print(optionalString)  // "Optional("Hello, world!")"

optionalString = nil
print(optionalString)  // "nil"

위 코드에서 optionalString 변수는 String? 타입으로 선언함.
초기값으로 "Hello, world!" 문자열을 할당하고 출력하면 Optional("Hello, world!")와 같이 Optional로 감싸진 문자열이 출력됨.
이어서 optionalString 변수에 nil 값을 할당한 후 출력하면 nil이 출력됨.

또한, 아래와 같은 방법으로 옵셔널 변수에 접근할 때에는 강제 언래핑(!)을 사용하여 옵셔널 값을 강제로 추출할 수도 있음.

var optionalString: String? = "Hello, world!"
print(optionalString!)  // "Hello, world!"

optionalString = nil
print(optionalString!)  // Error: unexpectedly found nil while unwrapping an Optional value

위 코드에서 optionalString 변수를 강제 언래핑하여 출력하면 Optional("Hello, world!") 대신 "Hello, world!"가 출력됨.
하지만, 옵셔널 변수에 nil 값이 할당되어 있을 때 강제 언래핑을 시도하면 앱이 충돌하므로 주의해야함!!

그리고 느낌표(!)를 쓰지 않고 언래핑하는 방법인 옵셔널 바인딩이라고 있음.

옵셔널 바인딩(Optional Binding)은 옵셔널 변수에 값이 있는지 확인하고, 값이 있다면 그 값을 다른 변수에 할당하는 것임.
옵셔널 바인딩을 사용하면 옵셔널 값을 안전하게 추출할 수 있으며, 값이 없을 때는 코드 실행을 건너뛰어 안전한 앱을 만들 수 있음.

if let 구문

if let 구문은 옵셔널 변수를 할당할 새로운 변수를 만들고, 그 변수에 옵셔널 값이 할당될 수 있는지 검사하는 구문임.

var optionalString: String? = "Hello, world!"

if let unwrappedString = optionalString {
    print(unwrappedString)  // "Hello, world!"
} else {
    print("optionalString is nil")
}

위 코드에서 if let 구문을 사용하여 optionalString 변수를 검사하는 것임. optionalString 변수에 값이 있으면 unwrappedString 변수에 할당하고, 그 값을 출력합니다. 값이 없으면 else 블록이 실행됨.

guard let 구문

guard let 구문은 if let 구문과 유사하지만, 코드 실행 중 함수나 메소드를 빠져나가는 것이 가능함.

func printOptionalString(optionalString: String?) {
    guard let unwrappedString = optionalString else {
        print("optionalString is nil")
        return
    }

    print(unwrappedString)
}

printOptionalString(optionalString: "Hello, world!")  // "Hello, world!"
printOptionalString(optionalString: nil)              // "optionalString is nil"

optionalString 변수에 값이 있으면 unwrappedString 변수에 할당하고, 그 값을 출력합니다. 값이 없으면 else 블록이 실행되어 "optionalString is nil"이 출력되고, 함수가 반환됨.

이상 IOS Optional에 대해서 적어봤음.

0개의 댓글