이번에는 옵셔널 체이닝에 대해서 내용 확인을 진행해보려고 한다.
옵셔널 체이닝이란?
- 옵셔널에 속해 있는 nil 일지도 모르는 프로퍼티, 메소드, 서브 스크립션 등을 가져오거나 호출할 때 사용할 수 있는 일련의 과정
약간 옵셔널 바인딩과 개념이 비슷하다고 볼 수 있다. 간단한 예제를 통해서 옵셔널 체이닝에 대해서 확인을 해보도록 하자.
FoodCourt 라는 푸드코드 구조체를 생성하였다, FoodCourt 구조체 안에는 FoodCourt의 이름을 상수로 선언하였고,
직원 구조체인 Employee를 가져온 employee 변수를 생성하였다.
직원이 없을 수도 있음을 가정하에 employee 변수는 옵셔널로 선언을 하였다.
koreanfood 라는 FoodCourt의 인스턴스를 생성했고, name을 비비고, 직원은 nil을 넣어 초기화를 진행했다.
당연하게 nil을 넣어줬으니 콘솔창에 nil이라는 결과가 출력된 내용을 확인할 수 있다.
직원이 있다는 가정하에 japanfood로 FoodCourt의 인스턴스를 하나 새로 생성했다.
또한 employee1 의 Employee 인스턴스를 생성하면서 직원의 이름은 nanako로 지정을 했다.
그리고 일식당의 이름을 출력해봤다. 정상적으로 스시집으로 표기가 된 내용을 확인할 수 있다.
그럼 이제 nanako의 이름까지 출력을 해보도록하자.
우리가 알고있는 내용대로 japanfood.employee.name을 사용해서 nanako를 출력하려고 했지만 에러가 발생했다.
에러를 확인해봤을 때에 이전에 옵셔널을 확인할 때에 몇 번 봤던 에러가 나오는 것을 확인할 수 있다.
즉, name으로 접근하기 전에 employee 타입의 옵셔널이 언랩핑 되어야 한다는 에러가 발생했다.
당연하게 japanfood.employee 타입이 옵셔널 타입이고, 옵셔널로 감싸져있기 때문에 employee의 name 프로퍼티에 접근하기 전에 옵셔널을 언랩핑 하라는 의미이다.
이 내용을 해결하기 위해 옵셔널 바인딩을 통해서도 할 수 있지만 옵셔널 체이닝을 통해서 접근을 해보려고 한다.
( 솔직히 뭐가 다른 건지 아직 Swift 초짜라서 정확히 모르겠다. )
옵셔널 체이닝을 하기 위해서는 ! 또는 ?를 붙여서 사용하면 된다. 이전에 옵셔널 바인딩에서 묵시적과 강제적을 생각하면 된다.
물음표와 느낌표를 사용하여 옵셔널 체이닝에 대해서 확인해봤다.
그럼 이제 ?를 사용했을 때와 !를 사용했을 때의 차이가 무었일까.
물음표는 랩핑이 되어있고, 느낌표는 언랩핑이 되어있다.
물음표로 옵셔널 체이닝을 할 경우에는 접근한 프로퍼티의 값은 항상 옵셔널에 랩핑이 되어있고, 느낌표로 옵셔널 체이닝을 할 경우에는 강제로 언랩핑을 하기 때문에 언랩핑이 된 값이 확인되는 것을 알 수 있다.
즉, 느낌표 같은 경우에는 옵셔널 바인딩에서 진행한 내용처럼 강제적으로 해제한다고 생각하면 편할 것 같다.
스위프트 문법 가이드에 많은 내용이 있지만.. 심오하게 들어가기 보다는 간단히 내용만 알아도 될 것 같음으로 우선 옵셔널 체이닝에 대해서는 이정도만 다루도록 하겠다.
'APPLE > Swift 문법' 카테고리의 다른 글
[ 기초 문법 ] Closure (0) | 2022.08.24 |
---|---|
[ 기초 문법 ] try-catch (0) | 2022.08.24 |
[ 기초 문법 ] 열거형 (0) | 2022.08.22 |
[ 기초 문법 ] Extension (0) | 2022.08.22 |
[ 기초 문법 ] Protocol (0) | 2022.08.19 |