본문 바로가기

앱 개발/IOS

[IOS 프로그래밍을 위한 스위프트 기초] 1단원 11. 옵셔널

11. 옵셔널

옵셔널의 정의 및 특징

정의

값이 있을 수도 있고 없을 수도 있는 것

특징

옵셔널이 아닌 상수에 nil을 할당하면 오류가 발생한다.

 

옵셔널이 필요한 이유

옵셔널은 nil의 가능성을 명시적으로 표현한 것이다.

1) nil 가능성을 문서화 하지 않아도 코드만으로 충분히 표현할 수 있다.

→ 문서/주석 작성 시간을 절약할 수 있다.

2) 전달받은 값이 옵셔널이 아니라면 nil체크를 하지 않더라도 안심하고 사용할 수 있다.

→ 효율적인 코딩을 할 수 있다.

→ 예외 상황을 최소화하는 안전한 코딩이다.

예시

// someOptionalParam can be nil
func someFunction(someOptionalParam: Int?) {
	// ...
}

// someParam must not be nil
func someFunction(someParam: Int) {
	// ...
}

someFunction(someOptionalParam: nil) // 오류 발생 안함
someFunction(someParam: nil) // 컴파일 오류 발생

 

옵셔널은 열거형과 제너럴의 합작품

코드에서의 옵셔널 정의

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

정식 표현

let optionalValue: Optional<Int> = nil

축약 표현

let optionalValue: Int? = nil

 

옵셔널의 표현법

! 표현법(Implicity Unwrapped Optional - 암시적 추출 옵셔널)

var optionalValue: Int! = 100

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

기존 변수처럼 사용할 수 있다.

optionalValue = optionallValue + 1

nil을 할당할 수 있다.

optionalValue = nil

다만, 잘못된 접근으로 인한 런타임 오류가 발생할 수 있다.

optionalValue = optionalValue + 1

이 경우에는 optionalValue가 nil로 할당되어 있지 않기 때문에 1을 더하면 오류가 발생한다.

? 표현법(일반적인 Optional)

var optionalValue: Int? = 100

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

마찬가지로 nil을 할당할 수 있지만

optionalValue = nil

기존 변수처럼 사용할 수 없다 (옵셔널과 일반 값은 다른 타입이기 때문에 연산이 불가하다.)

optionalValue = optionalValue + 1

 

 

 

 

 

©️NAVER Boostcourse. All Rights Reserved.