티스토리 뷰
안녕하세요. 오늘은 Swift의 강력한 기능 중 하나인 옵셔널에 대해 알아보겠습니다.
nil이란?
Swift에는 nil이라는 키워드가 있습니다.
기존 언어의 null과 같은 의미인 데이터 없음을 나타내는 기능입니다.
함수의 동작 중 진행 불가를 나타낼 때, 상태 없음, 데이터 없음을 나타낼 때 사용하며
만약 nil인 데이터를 작동시키면 ERROR를 나타내며 프로그램이 작동 중단을 하게 됩니다.
(Java - Null Point Exeption)
이러한 문제로 인해 Safe(안전성)을 중시하는 Swift는
데이터 타입에 nil을 넣을 수 없습니다.
옵셔널이란?
옵셔널은 해당 변수 또는 함수의 반환값으로 nil(데이터 없음)이 나타날 수 있음을 명시적으로 알려줍니다.
그렇기에 옵셔널 데이터 타입으로 명시한 변수나 함수의 반환값은 nil이 될 수 있습니다.
Swift의 옵셔널은 enum으로 만들어져 있습니다.
데이터가 있을 때 표현되는 some과 nil일 때 표현되는 none이라는 두 가지의 case를 가집니다.
enum으로 구현된 옵셔널에서 데이터를 가져오기 위해 switch를 사용하여 추출할 수 있습니다.
let data: String? = nil
switch data{
case .some(let value) :
print(value)
case .none :
print("nil data")
}
// nil data
하지만 모든 옵셔널의 값을 추출하기 위해 switch문을 사용한다면 굉장한 귀찮음을 감수하며 개발을 해야할 것 입니다.
그렇기에 간단하고 강력한 옵셔널 관련 문법을 Swift는 제공합니다.
if let 구문
let tempData: String? = nil
if let data = tempData{
print(data)
}else{
print("nil data")
}
// nil data
if let 구문을 통해 tempData의 값을 data라는 새로운 상수에 넣어
이 후 block부터 사용할 수 있습니다.
값이 없다면 else문에서 예외 상황에서 동작할 코드를 작성할 수 있습니다.
if let 구문을 통해 값이 있을 때와 없을 때의 분기 처리를 간단하게 구현할 수 있습니다.
guard else 구문
let tempData: String? = nil
guard let data = tempData else { return }
print(data)
// return 됨
guard else 구문을 통해 nil일 때 실행을 빠르게 종료할 수 있습니다. else block 에는 return, break, continue, throw가 필수적으로 들어가야 합니다.
guard else 구문을 통해 nil 상황일 때의 대처를 쉽게 처리할 수 있습니다.
암시적 추출 옵셔널, 강제 추출
Swift로 개발을 하다 보면 지금 당장은 nil을 할당하여야 하지만
사용할 때에는 무조건 값이 있다는 곳에는 암시적 추출 옵셔널을 사용할 수 있습니다.
암시적 추출 옵셔널을 사용하면 일반 타입처럼 사용할 수 있으며 nil역시 할당할 수 있습니다.
하지만 값이 nil일 때 접근을 시도하면 ERROR가 발생하니 주의하여 사용하세요!
또한 옵셔널 값에서 무조건 데이터가 있을 때에는 !를 통해 강제 추출을 할 수 있습니다.
(예외 처리를 하지 않아도 데이터를 받을 수 있습니다.)
하지만 이 방법 역시 값이 nil일 때 사용하면 ERROR가 발생하니 주의하여 사용하세요!
마치며
오늘은 옵셔널에 대해 알아보았습니다.
Swift를 통해 개발을 진행하다 보면 옵셔널 관련 기능이 얼마나 강력한지 느끼실 수 있을 겁니다.
궁금한 점은 하단의 댓글로 남겨주세요!
감사합니다.
'언어 소개 - Swift' 카테고리의 다른 글
Swift - 프로퍼티 (0) | 2018.06.01 |
---|---|
Swift - 클래스와 구조체 (0) | 2018.05.31 |
Swift - 흐름 제어 (0) | 2018.05.29 |
Swift - 함수 (0) | 2018.05.28 |
Swift - ARC (0) | 2018.05.25 |
- Total
- Today
- Yesterday