* 스위프트 옵셔널 타입(optional type)
스위프트 옵셔널 데이터 타입은 기존의 다른 프로그래밍 언어네는 없는 새로운 개념.
목적 : 변수 또는 상수에 아무런 타입의 값이 할당되지 않는 사황을 처리하기 위해 안전하고 일관된 방법 제공
옵셔널하게 변수를 선언하기 위해서는 타입 선언부 뒤에 " ? " 문자를 두면 된다.
index 변수는 이제 정수 값을 갖거나 아무 값도 갖지 않을 수 있다. 이면에서는 옵셔널 변수에 값이 할당되지 않아 컴파일러
와 런타임에 문제가 되므로 변수는 실제로 nil의 값을 갖는다.
옵셔널은 다음과 같은 방법으로 변수에 할당된 값이 있는지를 식별한다.
만약 옵셔널이 할당된 값을 갖는다면 그 값은 옵셔널에 "래핑되었다(wrapped)"라고 한다. 옵셔널에 해핑된 값은
강제 언패링(forced unwrapping)이라 불리는 개념을 사용하여 접근된다. 간랸하게 말하자면 옵셔널 데이터 타입에서 값을
추출한다는 의미이고, 옵셔널 이름 뒤에 느낌표(!)를 두어 실행한다.
만약 옵셔널 변수은 index가 값을 가지고 있다면, 배열에서 그 위치에 해당하는 값을 콘솔에 출력해준다.
index는 옵셔널 타입이기 때문에 해당 값은 변수 이름 다음에 느낌표를 사용하여 언래핑된다.
index변수가 언래핑되지 않았다면(즉, 위의 코드에서 느낌표를 생략했다면)컴파일러는 다음과 같은 에러를 내놓을 것이다.
Value of optional type Int? not unwrapped
강제 언래핑하는 또 다른 방법으로, 옵셔널 바인딩(optional binding)을 이용하여 옵셔널에 할당된 값을 임시 변수 또는 상수에
할당할 수 있다.
위의 코드는 두 가지 작업을 한다.
1. 지정된 옵셔널이 값을 가지고 있는지를 확인
2. 옵셔널이 값을 가지고 있다면 선언된 상수에 그 값을 할당하고 if문 수행
즉, index가 값을 가지고 있는지 확인 후, 가지고 있다면 myvalue상수에 index의 값을 할당 시키고 if문 수행
옵셔널이 암묵적인 언래핑(implicitly unwrapped)이 되도록 선언할 수도 있다.
이러한 방법으로 옵셔널이 선언된다면 강제 언래핑이나 옵셔널 바인딩을 하지 않아도 값에 접근할 수 있다.
암묵적인 언래핑으로 옵셔널을 선언하기 위해서는 느낌표를 사용하면 된다.
암묵적인 언래핑으로 선언된 index 옵셔널 변수는 위의 print호출에서 배열의 인덱스를 사용할 떄 더이상 언래핑할 필요가 없다
오직 옵셔널 타입만 아무런 값을 갖지 않거나 nil값을 가질 수 있다.