본문 바로가기
Languages/Swift

사당 iOS 스터디 1주차 - 옵셔널

by 탄이. 2018. 7. 23.







스위프트의 특징 중 하나인 안전성(safe)을 문법으로 담보하는 기능

‘변수나 상수 등에 꼭 값이 있다는 것을 보장할 수 없다. 즉, 변수 또는 상수의 값이 nil일 수도 있다’는 것을 의미

__8.1 옵셔널 사용

변수 또는 상수에 정말 값이 없을 때만 nil로 표현

오류가 발생하는 nil 할당

  • 값이 없는 옵셔널 변수 또는 상수에 (강제로) 접근하려면 런타임 오류가 발생합니다. 그렇게 되면 OS가 프로그램을 강제 종료시킬 확룰이 매우 높습니다.

옵셔널 변수의 선언 및 nil 할당

  • 옵셔널 변수 또는 상수 등은 데이터 타입 뒤에 물음표(?)를 붙여 표현

__8.2 옵셔널 추출

8.2.1 강제 추출

  • 런타임 오류의 가능성을 항상 내포하기 때문에 옵셔널 강제 추출(Forced Unwrapping) 방식은 사용하는 것을 지양

8.2.2 옵셔널 바인딩

  • 옵셔널에 값이 있는지 확인할 때 사용

  • 만약 옵셔널에 값이 있다면 옵셔널에서 추출한 값을 일정 블록 안에서 사용할 수 있는 상수나 변수로 할당해서 옵셔널이 아닌 형태로 사용

  • 한 번에 여러 옵셔널의 값을 추출할 수도 있습니다. 쉼표(,)를 사용해 바인딩 할 옵셔널을 나열

  • 단, 바인딩하려는 옵셔널 중 하나라도 값이 없다면 해당 블록 내부의 명령문은 실행되지 않습니다.

8.2.3 암시적 추출 옵셔널

  • 런타임 오류가 발생하지 않을 것 같다는 확신이 들 때 nil을 할당해줄 수 있는 옵셔널이 아닌 변수나 상수가 있으면 좋을 겁니다. 이때 사용하는 것

  • 암시적 추출 옵셔널(Implicitly Unwrapped Optional)을 사용하려면 타입 뒤에 느낌표(!)를 사용

  • 암시적 추출 옵셔널의 사용

    • 암시적 추출 옵셔널로 지정된 타입은 일반 값처럼 사용할 수 있으나, 여전히 옵셔널이기 때문에 nil도 할당해줄 수 있습니다. 그러나 nil이 할당되어 있을 때 접근을 시도하면 런타임 오류가 발생

옵셔널을 사용할 때는 강제 추출 또는 암시적 추출 옵셔널을 사용하기보다는 옵셔널 바인딩, nil 병합 연산자를 비롯해 뒤에서 배울 옵셔널 체이닝 등의 방법을 사용하는 편이 훨씬 안전합니다. 또한 이렇게 하는 편이 스위프트의 지향점에 부합합니다.





참고


야곰의 스위프트 프로그래밍 

https://book.naver.com/bookdb/book_detail.nhn?bid=12571019




2018/07/23 - [삽질/Swift] - 사당 iOS 스터디 - 함수

댓글