프로그래밍iOS 개발자

Swift에서 optional이란 무엇입니까? 안전한 값 추출 메커니즘과 optional 작업의 일반적인 함정에 대해 설명하십시오.

Hintsage AI 어시스턴트로 면접 통과

응답.

Optional은 Swift에서 T 유형의 값을 포함하거나 아예 값을 포함하지 않을 수 있는 특별한 유형입니다(nil). T?로 표기됩니다. 변수에 값이 없을 수 있다는 것을 명시적으로 지정할 수 있으며, 컴파일 단계에서 값의 존재를 확인하는 것을 보장합니다.

값 추출 메커니즘:

  • Optional binding:
let str: String? = "hello" if let s = str { print(s) }
  • Guard binding:
guard let s = str else { return } print(s)
  • Force unwrapping:
let s = str!

(값이 nil인 경우 runtime crash를 초래할 수 있음)

  • Optional chaining:
let length = str?.count
  • Nil coalescing operator (??):
let value = str ?? "default"

속임수 질문.

String 유형의 변수에 nil을 할당할 수 있나요? 그렇다면 무슨 일이 발생하나요?

응답: 아니요, 일반 유형의 변수(String)에 nil 값을 할당할 수 없습니다. 오직 optional만 nil일 수 있으며, 그렇지 않으면 컴파일 오류가 발생합니다.

예시:

var a: String // a = nil // 컴파일 오류: Nil cannot be assigned to type 'String' var b: String? b = nil // OK

주제에 대한 세부 사항을 모르는 실제 오류 사례.


이야기

앱에서 값의 force unwrapping을 시도했을 때 데이터베이스에서 항상 올바른 응답이 온다고 생각하여 필드가 없으면 크래시가 발생했습니다. 이 오류는 optional binding을 통한 추가 검사를 통해 해결되었습니다.


이야기

푸시 알림을 보낼 때 사용자 이름이 non-optional 변수에 저장되어 API에서 빈 이름이 올 경우 애플리케이션이 크래시되었습니다. 분석 후 유형을 optional로 변경하고 nil 처리를 추가했습니다.


이야기

프로젝트에서 optional 값을 함수에 전달할 때 인수가 optional 유형 없이 선언되었습니다. 숨겨진 버그와 크래시가 발생했습니다. 변경을 통해 매개변수 유형이 optional로 바뀌고 값 존재를 확인하는 검사가 추가되었습니다.