Optional에 대해 설명하시오

French Marigold·2023년 6월 13일
0

면접 준비

목록 보기
2/9

Optional이란?

값이 있을 수도 있고, 없을 수도 있는 타입을 옵셔널 타입이라고 합니다.
표기는 ?로 작성합니다.
예를 들어 var number: Int 라고 선언하고 초기화는 하지 않았다고 가정해봅시다.
이 number를 print하면 컴파일러에서 에러를 발생시킵니다. 당연합니다.
메모리에 공간은 만들었지만 그 내부에 값을 할당하지 않았기 때문입니다.

그렇다면 var number: Int? 라고 선언하고 초기화는 하지 않았다고 가정해봅시다.
이 number를 print하면 nil이라는 결과값이 나옵니다. nil이 과연 무엇일까요?
nil은 값이 없음을 나타내는 값입니다.
그러니까 값이 실제로 없는 것이 아니고 '값이 없음'을 나타내는 값이라는 뜻입니다.


옵셔널을 해제하는 4가지 방법

그렇다면 옵셔널을 어떻게 벗길 수 있을까요? 4가지 방법이 존재합니다.

1) 강제 언래핑

var three: Int? = 3
print(three!) // Optional(3)이 아닌 3이 나옵니다.
  • ! 표를 붙여서 옵셔널 타입을 강제로 벗겨내는 구문입니다. 값이 있다는 것이 확실할 때만 사용하는 것이 좋습니다.
  • 값이 있다고 생각해서 강제 언래핑을 했는데 값이 없으면 에러가 발생합니다.

2) if문을 사용해 언래핑 (강제 언래핑과 같이 사용해야 함)

if three != nil {
     print(three!)
}
  • 쉽게 이야기해 three라는 값이 nil이 아니라면, 즉, three에 nil이 아닌 다른 값이 들어가 있다면 print문을 실행하는 것입니다.

3) if let 바인딩, guard let 바인딩

if let successThree = three {
    print(successThree)
}
  • if let 바인딩은 옵셔널 값 three를 상수 successThree에 할당했을 때,
    1) 옵셔널 값 three가 nil일 경우 옵셔널을 벗기지 않고 코드 블록을 실행하지 않으며,
    2) 옵셔널 값 three에 값이 있을 경우 옵셔널을 언래핑해 상수 successThree에 할당한 후, 코드 블록을 실행하는 구문입니다.

4) 닐 코얼레싱

 var name = nil ?? "길동"
 print(name) // 길동
  • A ?? B 구문. 만일 A값이 nil이라면 , default 값, 즉 B를 nil 대신 할당하도록 하는 구문입니다.

  • 즉, 옵셔널은 에러가 발생하는 것을 방지하기 위한 최고의 안전장치인 겁니다. 메모리에 값이 없을 경우 nil로 처리하고,

  • 값이 있을 경우에는 Optional(값)으로 나오기 때문에 값이 있는 것을 확인하면 옵셔널을 벗겨서 사용하면 되기 때문입니다.


옵셔널은 내부적으로 Enum 타입이다

Optional은 내부적으로 enum 타입이며 some과 none 두 case가 존재합니다.

  • some에는 옵셔널로 래핑된 값을 저장합니다.
  • none에는 nil 값을 저장합니다.
profile
꽃말 == 반드시 오고야 말 행복

0개의 댓글