티스토리 뷰

Swift

[Swift]옵션널 기본

Esiwon 2022. 1. 31. 18:54

스위프트를 배우면서 배운 것을 기록하려 첫 글을 올린 후 2주 만에 글을 써보내요. 그간 ios를 배우려 부트 캠프도 지원하였고, 회사 면접도 보았으며, 자바를 이용하여 안드로이드 토이프로젝트를 만드느라 두 번째 글을 올리는데 2주라는 시간이 흘렀네요. 이번엔 스위프트 기본 문법을 배우며 낯 썰게 느껴진 옵션널에 대해 글을 남겨놓으려 합니다.

스위프트에 공식 문서에 옵션널은 "상수 또는 변수가 nil을 가질 수 있음을 나타냄"이라고 쓰여있다.
때문에 아래와 같은 장점이 있다.

  • nil 가능성을 코드로 표현가능
  • 변수 또는 상수가 nil 값을 가질 수 있는지 없는지 알 수 있기에 효율적이고,오류에 대한 안전한 코딩 가능

옵셔널은

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

 

로 열거형이 기본 타입이다.

 

let optionalValue: Optional<Int> = nill
//옵셔널 표현에 완전한 문법
let optionalValue: Int? = nill
//옵셔널 표현에 축약형 문법이면서 주로 사용되는 표현

변수 또는 상수 뒤 "?" 또는 "!" 붙여 표현한다.

"!"는 "암시적 추출 옵셔널" 이라 부르고 옵셔널이라 nil 값이 할당 가능하지만, 값이 들어가 있으면 같은 타입끼리는 연산 같은 기존 변수처럼 사용이 가능

"?"는 "옵션널" 이라 부르고 "!" 같이 nil 값이 할당 가능하지만, 독립된 타입으로 여겨져 일반 값과 기존 변수 처럼 사용이 불가하다.

옵션널값은

  • 옵셔널 바인딩(Optional Binding)
  • 옵셔널 체이닝(Optional Chaining)
  • nil병합(Using the Nil-Coalescing Operator)
  • 강제 언래핑(Unconditional Unwrapping)

사용하여 옵셔널 값을 일반 값으로 꺼내올 수 있다.

 

 

예를들어, 옵셔널 바인딩에서 if let 문법을 사용하면,

 

var myName: String! = nil

if let name: String = myName {
    print("myName에 이름이 들어가 있습니다.")
} else {
    print("myName에 이름이 안들어 있습니다.")
}



이런식으로 값이 있으면 if문이 nil이면 else문이 실행된다.

또한, 강제 언래핑을 사용하면,

 

func printName(_ name: String) {
    print(name)
}
var myName: String? = "홍길동"
printName(myName!)//myName에 값이 들어있으면 강제 추출 단, 값이 없는 nil이면 오류 발생

 

식으로 옵셔널값을 추출하여 일반 변수에 사용할 수 있다.

하지만, 잘못된 접근으로 인해 오류가 발생할 여지가 많음 안전한 사용법이 아님 

강제 언래핑이 아닌 그외 방법을 사용한다면, 값이 있을때랑 없을때 따로 분리할 수 있어 오류를 방지 할수 있어 안전하게 값 추출 가능

 

다음엔, 추출해 관해 좀더 기록해 볼께요.👋

 

 

참고: https://www.youtube.com/watch?v=YBofMKyfDaQ, https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html, https://developer.apple.com/documentation/swift/optional

'Swift' 카테고리의 다른 글

[Swift] Protocol  (0) 2022.02.23
[Swift] 객체지향(OOP)  (0) 2022.02.23
[Swift] 옵셔널 추출  (1) 2022.02.14
[Swift]Swift random(), randomElement() 함수 알아보기  (0) 2022.02.11
[Swift]Class, Instance, Object 알아보기  (0) 2022.02.07
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함