티스토리 뷰

언어 소개 - Swift

Swift - 옵셔널

최초의 펭귄 2018. 5. 30. 19:00

안녕하세요. 오늘은 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