8.7.2 옵셔널 체인
옵셔널 체인은 옵셔널 타입으로 정의된 값이 하위 프로퍼티나 메서드를 가지고 있을 때, 이 요소들을 if 구문을 쓰지 않고도 간결하게 사용할 수 있는 코드를 작성하기 위해 도입되었습니다. 옵셔널 체인은 객체가 nil인 상황에서 안전성 검사를 하지 않고 메서드나 프로퍼티를 호출하더라도 오류가 발생하지 않을 수 있는 문법을 옵셔널 스타일을 이용하여 구현합니다. 앞선 예시에서 boy변수 하위의 name 변수를 호출할 때는 아래와 같이 사용하면 됩니다.
boy?.name
설령 boy 변수에 nil이 할당되어 있더라도 잘못된 참조에 의한 오류는 발생하지 않고 아무 일도 일어나지 않습니다. 옵셔널 체인의 마지막 값 자체는 옵셔널 체인에 해당하지 않습니다. 옵셔널 체인으로 처리할 수 있는 것은 하위 속성이나 메서드를 호출할 때입니다. 만약 값을 참조하는 것이 아니라 할당할 때는 다음과 같이 간편하게 작성할 수 있습니다.
boy?.name = "Peter"
일반적으로 옵셔널 체인에는 다음과 같은 특징이 있습니다.
옵셔널 체인으로 참조된 값은 무조건 옵셔널 타입으로 반환된다
옵셔널 체인 과정에서 옵셔널 타입들이 여러 번 겺쳐 있더라도 중첩되지 않고 한 번만 처리된다
1번에서 옵셔널 체인 구문에서 마지막에 오는 값이 옵셔널이 아닌 일반 값일지라도 옵셔널 체인을 통해 참조했다면 이 값은 옵셔널 타입으로 변경됩니다.
print(boy?.man)
// Optional(true)
man 프로퍼티는 옵셔널이 아닌 Bool 타입이지만 결과는 옵셔널 타입으로 확인됩니다. 반드시 옵셔널 타입으로 반환되는 이유는 옵셔널 체인이라는 구문 자체가 nil을 반환할 가능성을 내포하고 있기 때문입니다.
Last updated