Swift & iOS

[Swift] 옵셔널이란? 옵셔널 바인딩이란?

hammii 2022. 6. 9. 17:17
728x90
반응형

1. 옵셔널이란?

옵셔널이란 값이 있을 수도 있고, 없을 수도 있는 것이다.

 

일반적인 프로그래밍 언어에서는 값이 null 인 변수에 접근하면 프로그램이 종료된다.

하지만, swift는 안정성이 장점이므로 옵셔널을 사용하면 값이 없는 변수에 접근해도 프로그램이 종료되지 않는다 !

 

그렇다면 옵셔널은 어떻게 사용할까?

nil 값이 들어갈 수 있는 변수에는 타입 뒤에 ? 를 붙인다. 

var name: String? // nil
var optionalName: String? = "hammii"
print(optionalName) // Optional("hammii")

name 변수는 값을 넣어주지 않아서 nil 로 초기화되었고,

optionalName 변수는 Optional 에 감싸 져서 출력되었다.

 

옵셔널 값은 일반 타입과 결합하거나 연산할 수 없기 때문에 

옵셔널 값을 사용하려면 옵셔널 바인딩을 해야 한다.

 

2. 옵셔널 바인딩

옵셔널 바인딩이란 옵셔널 포장지를 벗겨 값을 추출하는 과정이다.

옵셔널 해제 방법인 명시적 해제와 묵시적 해제에 대해 알아보자. 

 

2-1. 명시적 해제

  • 강제 해제
    • nil인 옵셔널을 강제 해제하면 에러가 발생해 프로그램이 강제 종료될 수 있다. 따라서 매우 위험 !!!
var number: Int? = 3
print(number) // Optional(3)
print(number!) // 3
  • 비강제 해제 (옵셔널 바인딩)
    • if 옵셔널 바인딩 - if 블록 내에서만 사용 가능하다. (nil일때와 아닐 때 둘 다 취급)
    • guard 옵셔널 바인딩 - guard 문 다음 함수 전체에서 사용 가능하다. (nil일 때만 취급)
if let result = number {
    print(result)	// nil이 아닐 때
} else {
    print("nil")	// nil일 때
}

func test() {
    let number: Int? = 5
    guard let result = number else { return }	// nil일 때
    print(result)
}
test()

2-2. 묵시적 해제

  • 컴파일러에 의한 자동 해제
    • 비교 연산자를 통해 비교를 하게 되면, 컴파일러가 자동으로 옵셔널을 해제해준다.
let value: Int? = 6
if value == 6 {
	print("value가 6입니다.")
} else {
	print("value가 6이 아닙니다.")
}
  • 옵셔널의 묵시적 해제
    • string 상수에 숫자가 아닌, 한글이나 영어가 들어가게 되면 Int() 함수는 nil을 반환하기 때문에 반환 타입이 Optional Int 이다.
    • 따라서 stringToInt 변수는 옵셔널 타입으로 선언되어야 한다.
    • 옵셔널 타입에 붙어있는 ?를 !로 바꾸면 묵시적 해제가 된다.
let string = "12"

var stringToInt: Int? = Int(string)
print(stringToInt)	// Optional(12)

var stringToInt2: Int! = Int(string)
print(stringToInt2 + 1)	// 13

 

 

출처: [패스트캠퍼스] 30개 프로젝트로 배우는 iOS 앱 개발 with Swift 초격차 패키지 Online.

 

728x90
반응형