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
반응형