[스위프트 기초] 10. 옵셔널

Seoyoung Lee·2022년 2월 24일
0


2021년 11월 15일에 공부한 내용입니다.

1. 옵셔널이란?

  • 값이 있을 수도, 없을 수도 있음을 뜻한다.
  • nil이 할당될 수 있는지 없는지를 표현한다.
  • 옵셔널이 아닌 상수에 nil 값을 할당하려고 하면 컴파일 오류가 발생한다.

2. 옵셔널은 왜 쓰는 걸까?

  • nil의 가능성을 명시적으로 표현하기 위해 사용한다.
    • nil의 가능성을 문서화하지 않고 코드만으로 표현할 수 있다.
    • 문서/주석 작성 시간을 절약할 수 있다.
  • 전달받은 값이 옵셔널이 아니라면 nil 체크를 하지 않더라도 안심하고 사용할 수 있다.
    • 효율적으로 코딩을 할 수 있다.
    • 예외 상황을 최소화하는 안전한 코딩을 할 수 있다.
// someOptionalParam에 nil이 할당될 수 있다.
func someFunction(someOptionalParam: Int?) {
    // ...
}

// someParam에 nil이 할당될 수 없다.
func someFunction(someParam: Int) {
    // ...
}

someFunction(someOptionalParam: nil) // ok
someFunction(someParam: nil) // 컴파일 에러

// 옵셔널을 사용하면 주석이 사라져도 문제가 없다!

3. 옵셔널 문법과 선언

  • 옵셔널은 enum + general의 합작품이다.

옵셔널 선언

enum Optional<Wrapped>:ExpressibleByNiliteral {
    case none
    case some(Wrapped)
}

let optionalValue: Optional<Int> = nil // 완전한 문법
let optionalValue: Int? = nil // 간단하게 표현 가능. ?는 띄어 쓰면 안 된다.

옵셔널 표현

1. 느낌표(!) 사용 - Implicitly Unwrapped Optional (암시적 추출 옵셔널)

var optionalValue: Int! = 100

switch optionalValue { // 옵셔널 타입 자체는 열거형이기 때문에 switch 구문으로 case를 구분할 수 있다.
case .none: // 값이 없는 경우
    print("This Optional variable is nil")
case .some(let value): // 값이 있는 경우
    print("Value is \(value)")
}

// 기존 변수처럼 사용 가능
optionalValue = optionalValue + 1

// nil 할당 가능
optionalValue = nil

// 잘못된 접근으로 인한 런타임 오류 발생
// 앞에서 nil을 할당했는데 여기에 접근하려고 하기 때문
optionalValue = optionalValue + 1

2. 물음표(?) 사용 - 일반적인 옵셔널

var optionalValue: Int? = 100 // Int 값이 들어있을 수도 없을 수도 있는 변수이다.

switch optionalValue {
case .none:
    print("This Optional variable is nil")
case .some(let value):
    print("Value is \(value)")
}

// nil 할당 가능
optionalValue = nil

// 기존 변수처럼 사용 불가 - 옵셔널과 일반 값은 다른 타입이므로 연산 불가능
optionalValue = optionalValue + 1
profile
나의 내일은 파래 🐳

0개의 댓글