Swift - 옵셔널(Optional)

2022. 9. 22. 11:00·Study/Swift
728x90
반응형

1. 옵셔널의 개념

값이 있을수도, 없을수도 있음을 표현한다.

 

nil이 할당될 수 있는지 없는지 여부의 표현이다.

 

2. 옵셔널을 쓰는 이유

- nil의 가능성을 코드만으로 표현할 수 있다.

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

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

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

 

3. 옵셔널 문법과 선언

옵셔널 문법은 enum + generics 라고 한다.

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

let optionalValue: Optional<Int> = nil
let optionalValue: Int? = nil

나는 지금까지 자바나 코틀린을 배우면서 enum에 관한 내용은 아예 공부를 하지 않아 이게 무슨 뜻인가 했는데

옵셔널은 열거형이 기본 타입이라고 한다. 옵셔널은 값이 없거나 어떤 값이 있는 두 가지 케이스로 구성되어 있다.

 

그리고 let를 통해 선언한 optionalValue는 첫 줄의 Optional<Int>로 자료형을 표기한 것이 정석이지만 Int?로 작성해도 같은 의미이다.

 

이 ?를 사용한 표현을 보니 코틀린의 Nullable 표현과 비슷해보였다.

 

 

느낌표를 이용한 암시적 추출 옵셔널

var implicitlyUnwrappedOptinalValue: Int! = 100

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

// 기존 변수처럼 사용 가능
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1

// nil 할당 가능
implicitlyUnwrappedOptionalValue = nil

// 잘못된 접근으로 인한 에러 발생
// implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1
// 이전에 nil을 할당했는데 +1을 수행할 수 없기 때문

이 표현을 보며 코틀린의 !!표현이 떠오른 건 나만 그럴리 없다고 생각한다(ㅋㅋㅋ)

 

 

물음표를 이용한 옵셔널

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
728x90
반응형
저작자표시 (새창열림)

'Study > Swift' 카테고리의 다른 글

Swift - 클래스(Class)  (0) 2023.12.05
Swift - 구조체(Struct)  (0) 2023.12.04
Swift - 반복문 (for-in, while, repeat-while)  (0) 2022.09.21
Swift - 조건문(if-else, switch)  (2) 2022.09.20
Swift - 함수 고급  (0) 2022.09.17
'Study/Swift' 카테고리의 다른 글
  • Swift - 클래스(Class)
  • Swift - 구조체(Struct)
  • Swift - 반복문 (for-in, while, repeat-while)
  • Swift - 조건문(if-else, switch)
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (238) N
      • Dev experience (86) N
        • Android (85) N
        • Kotlin (1)
      • Study (62)
        • Kotlin (26)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코루틴
    ios
    오블완
    PCCE
    안드로이드
    Observer
    LiveData
    databinding
    자바
    Material
    getNumericValue
    jetpack
    티스토리챌린지
    스위프트
    MVVM
    코틀린
    Java
    aac
    CodeLab
    ViewModel
    프로그래머스
    coroutines
    programmers
    배열
    daterangepicker
    Kotlin
    viewModelScope
    SWIFT
    room
    android
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Swift - 옵셔널(Optional)
상단으로

티스토리툴바