[Swift] 옵셔널 바인딩

HongDuHyeon·2023년 3월 26일
1
post-thumbnail

옵셔널 바인딩이란?

앞에서 작성한 옵셔널 코드에서 print를 찍어보면 아래와 같이 나온다.

var opotionalName: String? = "Duhyeon"
print(opotionalName)

//"Optional("Duhyeon")\n"

쉽게 풀어서 설명하면 Optional이라는 포장지 안에 "Duhyeon"이 들어가 있는 것이다. 이 상태는 일반 타입 변수와 결합, 연산 또한 할 수 없다.
그것을 해주는게 옵셔널 바이딩이다.

옵셔널 해제 방법

명시적 해제

  • 강제 해제
    • 변수 뒤에 !를 붙혀주는 방법이 있다.
    var number: Int? = 3
    print(number) // Optional(3)
    print(number!) // 3
    number에 느낌표를 붙혀주면 옵셔널을 강제 해제 해준다. 하지만 이 방법은 굉장히 위험하다. 혹시라도 값이 nil일 경우 프로그램이 강제 종료가 되는 상황이 나올 수도 있기 때문에 좋은 방법은 아닌 것 같다.
  • 비강제 해제(옵셔널 바인딩)
    • if 구문에 optional 값을 할당 받을 변수나 상수명을 써준다.
    if let result = number {
      print(result) // 3
    }
    만약 값 추출이 실패하면 else 구문이 실행이 된다.
  • guard
func test() {
    let number: Int? = 5
    guard let result = number else {return}
    print(result)
}

test() // 5

guard문은 if문과 다르게 if문에서 optional을 해제 했다면 if문 안에서만 사용가능 하지만 guard문은 optional 해제 하고 함수 내부 어디서든 사용이 가능하다.

묵시적 해제

  • 컴파일러에 의한 자동 해제
    • 옵셔널 값을 비교 연산자를 이용해 다른 값과 비교하면 컴파일러가 자동으로 해제 시켜주는 것
    let value: Int? = 6
    if value == 6 {
      print("value가 6입니다.")
    }else {
      print("value가 6이 아닙니다.")
    }
    // value가 6입니다.
    optional 값은 비교 연산자로 다른 값과 비교하면 컴파일러가 자동으로 옵셔널을 해제 시켜준다.
  • 옵셔널의 묵시적 해제
    • 옵셔널 타입이지만 값을 사용할 때는 자동으로 해제시켜준다.
      변수의 타입 뒤에 !를 붙혀주면 묵시적 해제가 된다. 그렇게 되면 일반 값처럼 자유롭게 연산 할 수 있다.
    let string = "12"
    var stringToInt: Int! = Int(string)
    print(stringToInt + 1)
    // 13
profile
마음이 시키는 프론트엔드.. RN과 IOS를 곁들인..

0개의 댓글