Optional

연어는결국강으로·2023년 11월 1일
0

Swift

목록 보기
3/6
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)")
}

옵셔널은 개인적으로 중요하다고 생각해서 좀 더 공부를 해보았다. 중요하기도 하지만, 자바와는 사뭇 다른 코드들 때문에 좀 더 공부해야 된다고 생각했다.

  1. nil vs null

일단 nil에 대해서 좀 찾아봤다. 내가 사용해본 적이 있는 자바, 자바스크립트, 파이썬은 null이라고 표현했던 것 같은데, 이 swift는 nil이라고 쓴다. 뭔가 비슷한데 다른것인가?

"Nil"은 여러 프로그래밍 언어에서 "null"을 나타내는 용어로 사용되었으며, 스위프트가 이 용어를 사용하는 것은 새로운 것은 아니다. 예를 들면, Objective-C에서도 "nil"이 참조 타입에 대한 null 값을 나타내는 데 사용된다.

스위프트의 전신인 Objective-C에서 "nil"은 객체 참조의 기본값으로 사용되었다. 스위프트는 Objective-C와 밀접하게 통합되어 있으므로, 일관성을 위해 "nil"이라는 용어를 계속 사용하게 되었다.

또한, 스위프트의 설계 철학 중 하나는 코드의 가독성과 명확성을 중시하는 것이다. "nil"은 "null"보다 짧은 단어로, 스위프트의 간결하고 읽기 쉬운 문법과 잘 어울린다.

결국 "nil"이나 "null"이나 의미는 동일하며, 언어의 설계 및 역사적 배경에 따라 선택된 용어다.

  1. 스위프트의 옵셔널에 대해서 좀 더 자세히 알아보자.

물론이죠! 스위프트의 옵셔널은 언어의 가장 중요하고 독특한 특징 중 하나이다. 이는 값이 있을 수도 있고 없을 수도 있는 상황을 나타낸다. 옵셔널을 다루는 여러 가지 방법이 있는데, 네 가지 방법을 자세히 살펴보자.

  1. Forced Unwrapping:

    • 사용 방법: !를 붙여서 값을 강제로 추출한다.
    • 위험성: 옵셔널 값이 nil인 경우 런타임 오류가 발생한다.
    let optionalValue: Int? = 10
    let forcedUnwrappedValue = optionalValue!
    print(forcedUnwrappedValue)  // 출력: 10
  2. 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")
    }
  3. 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
    
  4. Nil-Coalescing Operator (??):

    • 사용 방법: 옵셔널 값이 nil인 경우 대체할 기본 값을 제공합니다.
    let optionalValue: Int? = nil
    let defaultValue = optionalValue ?? 5
    print(defaultValue)  // 출력: 5

이러한 방식들을 사용하여 옵셔널을 처리함으로써, 런타임 시 nil 값으로 인한 오류를 방지하고 안정적인 코드를 작성할 수 있다.

0개의 댓글