본문 바로가기

Programming/Swift for Beginners

[Swift] 015 Optional (옵셔널) for beginners


앞서 동일한 타입의 새로운 변수에 할당할 수 있도록 문자열 변수 s의 내용을 Int형으로 변환하는데 Int() 메서드를 사용한 것을 기억할 것입니다.

Swift가 반환한 타입 지정자 다음에 나오는 물음표에 대해서 앞서 잠깐 살펴보았습니다. 이 물음표는 myConvertedInt 가 Int 그 이상이라는 의미를 내포하고 있습니다. 여기에서 물음표는 옵셔널(optional) Int를 의미합니다.

그럼 정확하게 옵셔널 기능은 무엇일까요? 옵셔널은 변수나 상수가 아무것도 없거나 또는 nil 일 수 있다고 Swift에 알려주는 타입 수식어입니다. 값 nil은 오랫동안 다른 프로그래밍 언어에서도 사용되었습니다. Objective-C에서도 nil로 쓰고 있으며 C 언어와 C++ 언어에서는 NULL로 사용되고 있습니다. nil은 기본적인 뜻은 '비어있다.'라는 의미입니다.

위의 예제에서 s 가 "123"이 아니라 "abc"라는 다른 상황에 있다고 가정을 해보겠습니다.

myConvertedInt 가 아직도 Int? 형(옵셔널 Int)이지만 값은 "123"이 아니라 "nil" 입니다. 그 이유는 Int형으로 변환한 "abc" 단어에 대한 수치 표현이 없기 때문입니다. nil을 반환하는 것은 Swift 언어가 패배를 수긍하는 방법이자 옵셔널이 성공할 수 있는 다른 길을 변수에게 보여주는 것입니다. 

앞의 예제에서는 "이것을 숫자로 변환할 수 없습니다."라고 말하는 방법으로 문자열 클래스 Int()메서드가 nil을 반환하는 것입니다.

변수를 옵셔널로 선언하려면 선언할 때 자료 타입의 끝에 물음표만 추가하기만 하면 됩니다.

아래 예제에서 Swift는 v가 실제로 옵셔널 Int라고 대답합니다. 선언할 때 값을 할당하지 않았기 때문에 할당된 디폴트 값은 0 이 아니라 nil 입니다. 

변수를 실제 값으로 설정해 보겠습니다. 

값을 보여주도록 해보겠습니다. print 메서드를 사용하는 대신 변수의 이름을 직접 입력합니다. Swift는 변수를 임시로 할당할 것입니다. Swift는 값으로 숫자 3을 보여줍니다. 

옵셔널은 Int 형에서만 실행되는 것은 아닙니다. 실제로는 어떤 타입이든 옵셔널로 선언할 수 있습니다. 아래 예제는 문자열 변수와 문자 변수를 옵셔널로 선언한 것입니다. u를 nil 값으로 설정해 옵셔널로 선언된 어떤 변수든 nil 에 할당될 수 있다는 것을 보여줍니다.

뒷부분에서 옵셔널에 대해 더 살펴보도록 하겠습니다. 지금은 옵셔널이라는 기능이 있으며 옵셔널에 사용되는 기호가 무엇인지 아는 것만으로도 충분합니다.