Swift

[Swift]옵셔널(Optional) - 2

느려도천천히 2021. 12. 29. 21:32

전편과 이어집니다

옵셔널 처리

let num: Int? = Int("123")
print(num)
//결과: Optional(123)

위와 같이 옵셔널 타입으로 정의한 것에 결과는 Optional이 앞에 붙은 결과가 나옵니다
이 Optional이라는 객체를 해제해야 실제로 쓸 수 있는 결과가 나옵니다
이때 옵셔널 객체를 해제하고 내부의 값을 가져오는 것을 옵셔널 해제라고 합니다
다른 말로는 옵셔널 언래핑(Optional Unwrapping)이라고 합니다

옵셔널 해제 방법
1)명시적 해제
1)강제 해제
2)비강제 해제
2)묵시적 해제
1)컴파일러에 의한 자동 해제
2)! 연산자를 이용한 자동 해제

옵셔널 강제 해제

강제 해제 방법은 !를 붙이면 끝!
! 기호는 강제 해제 연산자(Forced Unwrapping Operator)라고 합니다
예시를 봅시다

let num: Int? = 5
print(num)
//결과: Optional(5)
print(num!)
//결과: 5

먼저 num을 Type? -> 옵셔널 타입으로 선언하고 맨 마지막에 강제 해제 연산자를 이용하여 강제로 랩핑을 벗겨 값을 가져왔다
하지만 무조건 !를 사용하여 강제로 랩핑을 벗기는 것은 바람직하지 않습니다
만약 값이 nil이면 오류가 발생합니다

강제 해제 연산자를 사용할때에는 먼저 해당 값이 nil인지 아닌지 확인을 해야됩니다

let str = "123"
let intStr: Int? = Int(str)

if intStr != nil {
    print(intStr!)
} else {
    print("nil")
}
//결과: 123

위와 같이 값이 nil인지 아닌지 확인하고 ! 사용하여 값을 출력하자
하지만 str 값이 123이 아닌 문자열이면 어떻게 될까?

let str = "Swift"
let intStr: Int? = Int(str)

if intStr != nil {
    print(intStr!)
} else {
    print("nil")
}
//결과: nil

위와 같이 intStr = Int("Swift")가 성립되지 않아 nil로 되기 때문에, else 구문으로 가서 출력됩니다

다음에는 옵셔널 바인딩이라는 비 강제 해제에 대해 알아보도록 하겠습니다