맛동산이

스위프트 스터디 15탄) 옵셔널 체이닝 (optional chaining) 본문

앱/Swift 문법

스위프트 스터디 15탄) 옵셔널 체이닝 (optional chaining)

진ddang 2023. 7. 9. 02:41

 

스위프트 공식문서를 참조하였습니다.



옵셔널이란?

먼저 옵셔널 체이닝을 이해하기 이전에 옵셔널이라는 타입을 이해해야 한다.

옵셔널이란, nil이 들어갈수 있는 변수를 의미하며, 옵셔널의 값은 nil혹은 nil이 아닌값만을 가질수 있다.

옵셔널 선언

var st:String? = "hi"

옵셔널을 선언하기 위해서는 타입선언 뒤에 ? 를 붙여서 옵셔널 타입을 주면 된다.

옵셔널 해제

옵셔널 타입은 연산을 지원해주지 않는다. 즉 다른 변수들과의 연산을 전혀 할수가 없다. 옵셔널 타입의 결과값은 항상 옵셔널 타입만을 알려주기 때문에 언래핑을 해주어서 사용해야 한다.

옵셔널 해제는 명시적 해제 , 묵시적 해제로 나뉜다.

  • 명시적 해제 : 강제 해제, 비강제 해제
  • 묵시적 해제 : 컴파일러에 의한 자동해제, ! 연산자를 이용하여 자동 해제

 

명시적 해제

var option : Int? =10 print("value = \(option!)") 

이처럼 옵셔널 타입의 값 뒤에 !를 붙여주는걸로 강제로 일반타입으로 바꿔줄수 있다.

묵시적 해제

형식상 옵셔널 변수 타입을 선언해야 하지만, ! 연산자를 이용하여 묵시적 해제를 선언하게 되면, 자동으로 변수를 지정해줄때, 컴파일러가 자동으로 옵셔널을 해제해 준다.

  • 실제 사용시 nil의 값이 들어갈 확율이 없을 때 사용하게 된다.
var value : Int! = Int("12345")

 

옵셔널 체이닝의 정의

옵셔널 체이닝은 nil일수도 있는 프로퍼티(옵셔널 프로퍼티, 프로퍼티에 ? 혹은 ! 붙인놈) , 메소드 그리고 서브스크립트에 nil인지 질의하는 과정이다. 만약 옵셔널 체이닝이 프로퍼티, 메소드, 혹은 서브스크립트에 대한 값을 가질때, 그 값을 반환하고 그 반환된 값이 nil이면 nil을 반환하는데, 연결된 질문중 하나라도 nil이면 nil을 반환하게 된다.

 

옵셔널 체이닝의 선언

옵셔널 체이닝의 경우에는 강제 언래핑(!)의 대체제로 사용할 수 있는데, 강제 언래핑과의 차이는, 강제언래핑의 경우 그 값이 nil이면 런타임 에러를 반환하지만, 옵셔널 체이닝의 경우에는 런타임 에러가 아닌 nil이 반환된다는 것이다.

  • nil값이 반환되기 때문에 옵셔널 체이닝의 반환값은 항상 옵셔널이다.
  •  

Uploaded by

N2T
반응형