본문 바로가기
iOS/Swift

[Swift] 옵셔널(Optional)

by 혜모리 2022. 11. 16.
728x90
값이 있을 수도 있고, 없을 수도 있습니다. 😕

 

Xcode로 코드를 써 내려가다 보면 옵셔널이라는 단어를 자주 만나볼 수 있습니다.

대체 왜 이런 번거로운 기능을 만들었을까? 생각이 들 수도 있습니다.

그러나 값이 들어있을 거라 생각했던 것을 불러왔는데, 사실 값이 없으면 어떻게 될까요? 오류가 발생합니다.

옵셔널은 컴파일 오류와 런타임 오류를 최소화 하기위한 정말 중요한 장치입니다.

 

여기서 옵셔널을 알기 전에 컴파일 오류와 런타임 오류는 무엇인지 먼저 설명하겠습니다.


1. 컴파일 오류

Xcode에서 잘못된 코드, 컴퓨터가 읽을 수 없는 코드를 입력하면 발생하는 오류

 

컴파일*할 때 컴파일러* 코드를 검사합니다. 

빨간색으로 컴파일 오류 발생

 

구글에 자신이 만나게된 컴파일 오류를 그대로 검색하면, 많은 커뮤니티에서 같은 질문하는 사람을 만날 수 있습니다.

그러나 상황과 코드는 전부 다르기 때문에 해결 방법을 정확히 이해하고 적용하는 것이 필요합니다.

 

1-1 컴파일*이란?

2진법으로 된 코드만 읽을 수 있는 기계를 이해시키기 위해 고급언어(=사람어, 원시 프로그램)를 기계언어(목적 프로그램)로 번역하는 과정

1-2 컴파일러*란?

고급언어를 기계언어로 번역하는 언어 번역 프로그램


2. 런타임 오류

프로그램 실행 중에 발생하는 오류

 

코드가 컴파일이 되고난 후 실제로 실행할 때 발생하는 오류입니다.

운영체제 등의 문제가 있을 수 있으나 대체로 옵셔널 때문에 발생합니다.


3. 옵셔널(Optional)

스위프트에서 빈 값을 nil 이라고 부릅니다. 이것은 값이 0인 것이 아니고 정말 아무 값도 없을 때 nil이라고 부릅니다.

옵셔널은 이 nil의 가능성을 표현합니다. 

우리가 사용했던 변수나 상수에도 이 옵셔널을 ?!로 표현할 수 있습니다.

 

var someNumber: Int

print(someNumber)
// 변수에 할당한 값이 없어 컴파일 오류 발생

 

여기에 옵셔널을 뜻하는 ? 또는 !를 사용하면 nil을 반환해 줄 수 있습니다.

그러나 !는 강제로 값을 추출하기 때문에 런타임 오류에 취약합니다. 사용을 지양합니다.

 

var someNumber: Int?

print(someNumber) // nil 반환

var someNumber: Int!

print(someNumber) // nil 반환

 

대표적으로 Dictionary에서 Value를 전달해줄 때 기본적으로 옵셔널로 줍니다.

사용하고자하는 Key에 Value가 들어있지 않을 수도 있기 때문입니다.

 

var someDictionary: [Int: String] = [1: "1번", 2: "2번", 3: "3번", 4: ""]

someDictionary[1] // Optional("1번")
someDictionary[4] // Optional("")

 

이렇게 전달된 nil이나 옵셔널 값은 연산이나 출력에 사용할 수가 없습니다.

다음 포스팅에서 이러한 옵셔널을 벗겨내는 다양한 optional unwrapping 방법에 대해 설명하겠습니다.


728x90
반응형

'iOS > Swift' 카테고리의 다른 글

[Swift] 옵셔널 언래핑 (Optional Unwrapping)  (0) 2022.12.21
[Swift] 조건문(if-else, switch)  (0) 2022.11.15
[Swift] 열거형(enum)  (0) 2022.11.13
[Swift] 논리 연산자  (2) 2022.11.09
[Swift] 반복문(while, repeat-while)  (0) 2022.11.09

댓글