var someVar : Int? = nil
if someVar == nil {
someVar = 90
}
print("someVar: ", someVar)
// unwrap
if let otherVar = someVar {
print("unwrapped: \(otherVar)")
} else {
print("doesn't have value")
}
someVar = nil
// orElseGet
let myVar = someVar ?? 10
print("myVar: \(myVar)")
var firstValue : Int? = 30
var secondValue : Int? = 50
print("firstValue: \(firstValue)")
print("secondValue: \(secondValue)")
unwrap(param: firstValue)
unwrap(secondValue)
func unwrap(_ param: Int?){
print("unwrap() called")
// 값이 없으면 리턴 해버린다.
// 즉 지나간다.
guard let unWrappedParam = param else { return }
print("unWrappedParam: \(unWrappedParam)")
}
옵셔널은 개인적으로 중요하다고 생각해서 좀 더 공부를 해보았다. 중요하기도 하지만, 자바와는 사뭇 다른 코드들 때문에 좀 더 공부해야 된다고 생각했다.
일단 nil에 대해서 좀 찾아봤다. 내가 사용해본 적이 있는 자바, 자바스크립트, 파이썬은 null이라고 표현했던 것 같은데, 이 swift는 nil이라고 쓴다. 뭔가 비슷한데 다른것인가?
"Nil"은 여러 프로그래밍 언어에서 "null"을 나타내는 용어로 사용되었으며, 스위프트가 이 용어를 사용하는 것은 새로운 것은 아니다. 예를 들면, Objective-C에서도 "nil"이 참조 타입에 대한 null 값을 나타내는 데 사용된다.
스위프트의 전신인 Objective-C에서 "nil"은 객체 참조의 기본값으로 사용되었다. 스위프트는 Objective-C와 밀접하게 통합되어 있으므로, 일관성을 위해 "nil"이라는 용어를 계속 사용하게 되었다.
또한, 스위프트의 설계 철학 중 하나는 코드의 가독성과 명확성을 중시하는 것이다. "nil"은 "null"보다 짧은 단어로, 스위프트의 간결하고 읽기 쉬운 문법과 잘 어울린다.
결국 "nil"이나 "null"이나 의미는 동일하며, 언어의 설계 및 역사적 배경에 따라 선택된 용어다.
물론이죠! 스위프트의 옵셔널은 언어의 가장 중요하고 독특한 특징 중 하나이다. 이는 값이 있을 수도 있고 없을 수도 있는 상황을 나타낸다. 옵셔널을 다루는 여러 가지 방법이 있는데, 네 가지 방법을 자세히 살펴보자.
Forced Unwrapping:
!
를 붙여서 값을 강제로 추출한다.nil
인 경우 런타임 오류가 발생한다.let optionalValue: Int? = 10
let forcedUnwrappedValue = optionalValue!
print(forcedUnwrappedValue) // 출력: 10
Optional Binding (if let):
if let
구문을 사용하여 옵셔널의 값을 안전하게 추출한다.nil
이 아니라면 if let
블록 내의 코드가 실행된다.let optionalValue: Int? = 10
if let safeValue = optionalValue {
print(safeValue) // 출력: 10
} else {
print("Value is nil")
}
Guard Statement:
guard
문을 사용하여 옵셔널 값을 추출한다.nil
이면 조건문을 빠져나온다. (return
, break
, continue
등의 제어 전달 구문이 필요)func printValue(optionalValue: Int?) {
guard let safeValue = optionalValue else {
print("Value is nil")
return
}
print(safeValue)
}
printValue(optionalValue: 10) // 출력: 10
Nil-Coalescing Operator (??):
nil
인 경우 대체할 기본 값을 제공합니다.let optionalValue: Int? = nil
let defaultValue = optionalValue ?? 5
print(defaultValue) // 출력: 5
이러한 방식들을 사용하여 옵셔널을 처리함으로써, 런타임 시 nil
값으로 인한 오류를 방지하고 안정적인 코드를 작성할 수 있다.