[Swift] 옵셔널, 옵셔널 바인딩 (Optional Binding)

김상우·2021년 10월 26일
0
post-custom-banner

Keyword

  1. Optional
  2. Optional Biniding
  3. 옵셔널 해제
  • 명시적 해제
    • 강제 해제
    • 비강제 해제 (옵셔널 바인딩)
  • 묵시적 해제
    • 컴파일러에 의한 자동 해제
    • 옵셔널의 묵시적 해제
  1. "?" / "!"

옵셔널 (optional)

  • 옵셔널 (선택적인)
    값이 있을수도, 없을수도 있음을 말함.
  • 선언시에 타입뒤에 ?(물음표)를 붙여 사용할 수 있다.
// 옵셔널 : 선택적인
// 값이 있을수도 없을 수도 있음.
//
var name: String?

var optionalName: String? = "KSW"

print(optionalName)

// 에러 코드 (타입 에러)
// 스위프트는 안정성을 위해 컴파일 에러를 낸다.
// var name2: String = optionalName

  • 출력 결과를 살펴보면 Optional 이라는 포장지에 감싸있는 것을 볼 수 있다.
  • Optional에 감싸있는 값은 일반 타입과 결합도 연산도 할 수 없다.
  • 이 작업을 수행하려면 Optional Binding 을 해야한다.
    -> Optional 포장지를 벗기는 과정.

옵셔널 해제

  • 옵셔널 바인딩 : Optional 포장지를 벗겨 값을 추출하는 과정

  • 옵셔널 해제 방법
    1. 명시적 해제

    • 강제 해제
    • 비강제 해제 (옵셔널 바인딩)

    2. 묵시적 해제

    • 컴파일러에 의한 자동 해제
    • 옵셔널의 묵시적 해제

Swift 코드

// 명시적 해제
// 강제 해제 (느낌표 붙이기. 위험함)
var number: Int? = 3
print(number)
print(number!)
  
// 비강제 해제 1 (if문 사용 옵셔널 바인딩)
// **** 이 문법이 낯설다.
if let result = number {
    print(result)
} else{
    print("nil")
}


// 비강제 해제 2 (gaurd문 사용 옵셔널 바인딩)
// guard 문을 사용해서도 옵셔널 바인딩을 할 수 있다.
// guard 문에 대한 글 포스팅 예정.


// 컴파일러에 의한 자동 해제
// 옵셔널 값은 비교연산자를 이용해 다른 값과 비교하면,
// 컴파일러가 자동적으로 옵셔널 값을 해제 시켜준다.
let value: Int? = 6
if value == 6 {
    print("value가 6입니다.")
} else {
    print("value가 6이 아닙니다.")
}


// 묵시적 옵셔널 해제
// 값을 사용할 때는 자동으로 옵셔널이 해제됨
let str = "12"
var strToInt: Int? = Int(str)
// Int() 함수는 매개변수에 정수로 변환될 수 없는 값이 오면
// nil을 반환하기 때문에 옵셔널 타입으로 선언해야 한다.
print(strToInt)
// 선언시에 ! 키워드를 사용하면 묵시적으로 옵셔널 해제를 해준다.
var strToInt2: Int! = Int(str)
print(strToInt2+1)

profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.
post-custom-banner

0개의 댓글