나의 발자취

옵셔널이란? 본문

앱 개발/iOS

옵셔널이란?

달모드 2022. 5. 24. 00:08

우리가 타입을 선언하고 값이 없는 공간에 접근을 하면 에러가 발생한다. 

예를 들어,

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