나의 발자취
옵셔널이란? 본문
우리가 타입을 선언하고 값이 없는 공간에 접근을 하면 에러가 발생한다.
예를 들어,
var yourName: String // 선언
//yourName = "홍길동" // 값을 저장하지 않는다면..
print(yourName) // (만약 저장과정이 없다면) 메모리에 저장된 값이 없는데 접근 ===> 🔸"에러"
앱이 종료되게 된다. 그래서 물음표를 붙여줘서 에러가 나지 않도록 임시적인 타입을 담아두게 된다. -> 이것이 옵셔널
var yourName: String? // 옵셔널
print(yourName) // nil
nil : 값이 없음을 표현하는 키워드.
다른 언어에서는 null이 있다. 이는 값이 없음을 나타낸다. 그러나 스위프트에서는 실제 값이 없는 것이 아니다. 값이 없을 수 있다는 것을 알려주는 키워드이다.
실제 값을 사용하려면 포장지를 벗겨내야한다. = 옵셔널 언래핑
(nil 의 값을 강제로 벗겨내면 에러가 난다.)
Int: 정수형
Int? 옵셔널 정수형
이 둘은 완전히 다른 타입이다.
옵셔널타입은 값을 대입하지 않으면 nil로 초기화되면서 임시값이 들어가있게 된다. 그래서 접근을 해도 에러가 안난다.
// 지금까지의 타입 선언
let name: String = "Jobs" // 명시적
let newName = "Musk" // 암시적
var myAge = 20 // 암시적
let myGrade: Double = 3.54 // 명시적
// 옵셔널 타입
// 모든 타입의 뒤에 ? 물음표를 붙이면 옵셔널 타입이 된다.
var num: Int? = 3
var yourAge: Int? = nil
var yourGrade: Double? = nil
var name1: String? = "Jobs"
num = nil
name1 = nil
// 값이 없어도 되는 타입으로 선언 했기 때문에, 값이 없어도 괜찮음
옵셔널 타입 선언의 기본 규칙
- 1) nil 대입 가능
- 2) 자동 초기화 (값을 넣지 않을 시에 nil로 초기화) ⭐️
표기 방법
let num1: Int? = 2 // 간편표기
let num2: Optional<Int> = 0 // 정식문법
주의사항
1. 값이 변할수도, 없을수도 있기 때문에 항상 변수(var)로 선언을 해야한다!
let str: String = "Swift"
var optionalStr: String? = nil //옵셔널 스트링 타입 ====> (값이 없을 수도 있는 타입이다)
2. Int ⊂ Int?
옵셔널 범주가 더 크므로 Int -> Int? 에 담을 수 있다. 그 반대로는 값을 벗겨야지만 사용할 수 있다. nil이 아닌 경우에만 벗길 수 있다.
var a: Int? = 7 // 옵셔널 인트
var b = a // 값을 복사해서 담는 다면 타입은?
print(b) // Optional(7)
var c: Int = 5
b = c // Int를 Int?타입에 담을 수는 있다. (어쨌든 타입이 Int? 타입으로 바뀌어서 담김)
print(b) // Optional(5)
3. 옵셔널 타입끼리의 연산은 불가능하다.
옵셔널 타입 내에는 임시적인 값이 들어있기 때문에 임시적인 값들끼리는 계산이 불가능하다.
var numA: Int? = 3
var numB: Int? = 7
//print(numA + numB)
'앱 개발 > iOS' 카테고리의 다른 글
함수와 옵셔널타입 (0) | 2022.05.24 |
---|---|
옵셔널 언래핑 Optional Unwrapping (0) | 2022.05.24 |
print문 (0) | 2022.05.23 |
guard문 (0) | 2022.05.23 |
입출력 inout 파라미터 (0) | 2022.05.23 |
Comments