스위프트 공식문서를 참조하였습니다.
옵셔널이란?
먼저 옵셔널 체이닝을 이해하기 이전에 옵셔널이라는 타입을 이해해야 한다.
옵셔널이란, 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