옵셔널

손호준·2022년 6월 8일
0

swift

목록 보기
3/12

옵셔널

값이 있을 수도, 없을 수도 있음. nil의 가능성을 명시적으로 표현함. 옵셔널은 열거형(enum)과 제너럴(general)이 합쳐져있음.

enum Optional<Wrapped> : ExpressibleByNilLiteral {
  	case none //값이 nil이면 none case
  	case some(Wrapped) //값이 있으면 some case
  }
  //옵셔널 두가지 선언 방식//
  let optionalValue: Optional<Int> = nil
  let optionalValue: Int? = nil

옵셔널을 사용하는 이유

  1. nil의 가능성을 문서화 하지 않고 코드만으로 표현 가능하여 문서/주석 작성 시간 절약
  2. 전달받은 값이 옵셔널이 아니라면 nil체크를 안해도 안심하고 사용 가능
  3. 예외 상황을 최소화하는 안전한 코딩 가능하게함
  4. 효율적인 코딩 가능
//eg.1. someOptionalParam이 nil일 수 있음//
func someFunction(someOptionalParam: Int?) { 
	//..
}
someFunction(someOptionalParam: nil)

//eg.2. someparam은 nil이 될 수 없음//
func someFunction(someParam: Int) {
	//..
}
someFunction(someParam: nil) //컴파일 에러

암시적 추출 옵셔널(!)

var optionalValue: Int! = 100
switch optinalValue {
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

일반적인 옵셔널(?)

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

nil 병합 연산자

nil병합 연산자는 옵셔널을 사용할 때 유용하게 사용되는 연산자임.

A??B //A가 nil이 아니면 A를 반환, nil이면 B를 반환
//eg.1//
let someValue: Int = optionalInt ?? 0
profile
Rustacean🦀/Data engineer💻

0개의 댓글