컴퓨터라면 있으면 있고, 없으면 없고, 기면 기고 아니면 아닌 0, 1 두 상황만을 표현 하는 것만 있을 줄 알았는데,
있을 수도 없을 수도 있는 상태를 표시하는 방법이 있다는게 신선함.
● 옵셔널 (Optional), 있거나 없거나?
단어의 뜻은 선택적인, 의무적인 게 아닌. 있을 수도 있고 없을 수도 있고. 라는 애매한 뜻인데, 스위프트에서 안정성을 문법적으로 보장(?)하는 것이 옵셔널이라고 한다. 옵셔널은 타입뒤에 ?로 표시한다. 그리고 이 옵셔널은 사용하게 되면, '옵셔널 타입'이 되어 다른 타입과 또 달라진다.
var yourName: String? = "you"
print(yourName) // Optional("you") 출력
|
컴퓨터의 세계는 0 or 1이 아닌가? 있으면 있는 확실하게 거고 없으면 진짜 없는 건데 이게 왜 필요한 개념인지 잘 잡히지 않는다.
왜 필요 하지?
● 값이 없다는 건?
Int 타입에 0을 넣는 것, String 타입에 " "에 넣는 것도 값이 없는 것이라고 생각할 수 있지만, 0도 0이라는 하나의 값이고, " "(빈 문자열) 이것도 빈 문자열이라는 하나의 값이다. 값이 없다는 표현은 nil !
● 옵셔널 (Optional) 장점은?
장점1: 변수, 상수에 값이 있을 수도 없을 수도 있으니 사용할 때, 조심해! 라고 직관적으로 알 수 있음.
장점2: 함수에 전달 되는 전달인자의 값이 잘 못된 값일 경우 제대로 처리하지 못했음을 nil을 반환하여 오류가 있음을 알릴 수 있음.
정점3: 매개변수를 굳이 넘기지 않아도 된다는 뜻으로 매개변수 타입을 옵셔널로 정의 할 수 있음.
(사실 1번 빼고 2, 3번은 아직 잘 이해 하지 못하겠다...)
● 옵셔널 (Optional) 값을 가져 오고 싶을때?
두가지 방법이 있음. 1) if let, if var로 옵셔널 값을 체크 한 다음에 꺼내 준다. 2) 강제 추출 !느낌표를 사용하여 벗겨 준다.
var optionalName: String? = "Atom" var optionalAge: Int? = 30 if let name = optionalName, let age = optionalAge { print(name)
}
|
!표만 붙여서 가져 오므로 꺼내 오는게 간단한 느낌인데, 이 방법은 강제 추출방법으로 그리 권장되는 사항이 아님.
var name2: String! = optionalName
|
● 옵셔널 체이닝 (Optional chaining)
옵셔널을 풀어 주는 걸 체인처럼 이어서 가져 오는 것.
코드 줄을 많이 줄여 준다.
ex) 좋은 예제는 이곳에...
★ 옵셔널에 관한 CodeWithChris의 강의 링크
더 많이 써보고 코드를 봐야 왜 필요한지 알 수 있을 듯!
'Coding' 카테고리의 다른 글
Swift 프로토콜(Protocol) (0) | 2017.12.06 |
---|---|
Swift 오토레이아웃(Autolayout) (0) | 2017.12.03 |
Swift 클로저(closures) (0) | 2017.11.30 |
Swift 함수(Func) +함수와 개발에 관한 개인적인 기억들. (0) | 2017.11.27 |
swift 조건문(if, switch) (0) | 2017.11.27 |