사실 Optional은 연관값(associated value)을 갖는 열거형(enum)입니다....!?!?!😮
Optional은 Swift에서 내부적으로 아래와 같이 정의되고 있습니다.
public enum Optional <Wrapped>{ // <Wrapped>은 Generic 열거형으로 선언 한다는 의미
case some(Wrapped) // 값이 있는 경우
case none // nil값 -> 값이 없는 경우
}
Optional은 Swift에서 기본적으로 enum으로 구현되어 있기 때문에 아래와 같은 코드가 가능합니다.
Optional.some(<제너릭 데이터 타입의 값>)
은 <데이터 타입>? = 값
과 같은 표현방식입니다.
var a: Int? = 10
var A = Optional.some(10)
print(a) //Optional<Int>
print(A) //Optional<Int>
Optional은 Swift에서 기본적으로 enum으로 구현되어 있기 때문에 아래와 같은 코드가 가능하다.
Optional.none(<제너릭 데이터>)
은 <데이터 타입>?
과 같은 표현방식입니다.
var b: String?
var B = Optional<String>.none
print(b) //nil
print(B) //nil
우리가 사용하고 있는 옵셔널 타입(Optional Type)은 사실 열거형(enum) 타입이었습니다.
옵셔널 타입 외에도 개발자가 평소 자주 사용하는 타입(Int, String 등)들은 대부분 사용자에 의해 만들어지는 커스텀 타입(구조체, 클래스, 열거형)일 가능성이 높습니다.
Swift언어를 제작할 때 개발자의 편의를 위해 다양한 타입들을 미리 정의해 놓았기 때문에 개발자는 해당 타입의 자세한 내용까지는 알 필요가 없지만, 최소한 무슨 타입으로 정의 되었는 알고 있는 것이 좋다고 생각합니다. (확장 및 타입의 특징을 확실하게 이해하기 위해)