[Swift] Optional
옵셔널이란? : 값이 없을 수 있는 상황에서 Optional을 사용한다.
옵셔널로 사용할 Type뒤에 ?를 붙여 사용한다.
var number : Int? // Int 옵셔널
var text : String? // String 옵셔널
값이 없을 수 있다는 것은 무슨 의미일까?
String 값을 Int로 변환을 해야하는 경우 아래처럼 사용할 수 있다.
var test: Int = Int("123") // test = 123
하지만 다음과 같은 경우엔?
var test: Int = Int("Hello World") // test = ??
변환 할 수 없을 것이다. 이때 변환할 수 없음, 값이 없음이란 의미로 nil이란 값을 반환할 것이다
// var test: Int = Int("Hello World")
var test: Int? = Int("Hello World") // test = nil
주석 처리한 코드와 그 밑에 코드를 보면 ?가 달려 있는걸 알 수 있다
이 물음표는 해당 타입이 옵셔널이라는 것을 나타낸다!
정리하자면 Optional은 변수 혹은 상수에 값이 없음을 나타낼 수 있게 만들어 주고 값이 없는 상태는 nil로 표현한다!
이 nil 이란 놈은 이전 obj-c에서도 사용했었던 것 같은데 obj-c와 Swift에서의 nil은 같은 의미로 사용되는걸까?
기억에 obj-c에서는 따로 Optional이라는 개념이 없었던 것 같다.
obj-c에서의 nil은 유효한 객체가 없음의 의미로 쓰인다고 한다.
Swift에서의 nil은 값이 없음을 의미한다는데 같은 뜻 아닌가? 라고 할 수 있지만 객체와 값은 아주 큰 차이다
obj-c에서의 nil을 좀 더 풀어 말하면 존재하지 않는 객체에 대한 포인터라고 나와있다.
즉 obj-c 에서 nil은 객체 type에 대해서만 사용이 가능하다란 것이다. obj-c에서 일반 타입에 대한 값 없음은 NSNotFound라는 특수 값을 반환하여 나타낸다고 한다!
obj-c와 Swift의 nil의 차이점을 정리하자면,
Obj-c | Swift | |
---|---|---|
의미 | 유효한 “객체”가 없음(포인터) | “값” 없음 |
사용 가능한 Type | 객체 | 모든 유형 ( 객체, 구조체, 열거형등등) |
댓글남기기