clamp
Clamp
clamp
글쓰기 관리
전체 방문자
오늘
어제
  • 분류 전체보기 (509)
    • IOS (85)
    • SwiftUI+TCA+Combine (9)
    • RxSwift + MVVM (56)
    • Clean Architecture (12)
    • SWIFT (56)
    • iOS - TDD (2)
    • 디자인패턴 (4)
    • CS (56)
      • 알고리즘 (29)
      • 운영체제 (15)
      • 자료구조 (2)
      • 네트워킹 (4)
      • 기타 (6)
    • 회고 (0)
    • Firebase (18)
    • SwiftUI (10)
    • iOS - UIKit (11)
    • iOS - 오픈소스 (6)
    • 코딩테스트 (166)
      • 프로그래머스 (164)
    • 정보처리기사 (14)
    • GitHub (2)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • ㅅ
  • Swift
  • uikit
  • Q

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

[Swift] 옵셔널(Optional) ?
SWIFT

[Swift] 옵셔널(Optional) ?

2023. 3. 16. 18:18

Swift가 가지고 있는 가장 큰 특징 중 하나가 옵셔널(Optional)이다.

 

값이 없는데 접근을 하면 어떻게 될까

만약 값이 없는데 값에 접근한다면 에러가 발생한다.

 

 

옵셔널은 직역하면 "선택적인"이라는 뜻이 되는데, 값이 있을 수도, 없을 수도 있다는 의미이다.

만약 문자열이 있다고 하면 "가나다"가 될것이다  만약 값이 없다고 하면 ""도 아닌 그저 값이 없다는 것이다. 이런 값 없음을 나타내는 게 바로 nil이다.

 

nil: 값이 없음을 표현하는 키워드

 

값 없음을 표현하는 nil을 아무 변수에 사용할 수 있는것은 아니다.

옵셔널 변수에 사용해야 한다.

 

옵셔널 변수를 선언할 때에는 타입 어노테이션에 ? 를 붙여야 한다.

옵셔널로 선언된 변수와 옵셔널이 아닌 변수는 다르다. 옵셔널이 아닌 변수를 옵셔널 변수에 대입할 순 없다.


옵셔널의 구조

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

옵셔널은 열거형으로 이루어져있다.

case none의 경우 nil인 값이 없다는 의미


옵셔널 타입 추출

옵셔널 타입을 추출하는 방법은 4가지가 있다.

 

1) 강제추출 (Forced Unwrapping)

nil이 아닌 값이 있다는 것을 확신하는 경우 사용할 수 있다.

⭐️만약 nil값이 있다면 에러가 발생한다.⭐️

 

2) nil이 아닌지 확인 후, 강제추출

if문을 통해 nil이 아닌지를 먼저 확인 후 강제로 추출한다(1번방법)

에러의 가능성이 없어진다.

 

3) 옵셔널 바인딩 ⭐️⭐️⭐️

if let / guard let 바인딩을 사용한다.

바인딩(상수나 변수에 대입)이 되는 경우만 특정 작업을 수행한다.

일반적인 경우 이 방법을 사용한다.

 

if let 바인딩

str이란 옵셔널 변수가 s라는 상수에 대입되는 경우만 내부의 작업을 실행한다.

 

guard let 바인딩

n이란 변수에 name이 대입되는 경우에 { return } 이하를 실행한다.

대입되지 않는 경우에는 { }내부를 실행한다.

 

4) Nil-Coalescing ??

옵셔널 표현식 뒤에 기본값을 제시한다.


옵셔널 체이닝

옵셔널 타입으로 선언된 값에 접근해서 속성, 메서드를 사용할때 접근연산자(.)앞에 ?(물음표)를 붙혀야한다.

앞의 값이 옵셔널의 가능성을 내포한다는 의미이다.

 

규칙

1. 결과는 항상 옵셔널 타입으로 리턴된다.

2. 옵셔널 체이닝 과정에서 값중 하나라도 nil을 리턴한다면 이어지는 표현식을 평가하지 않고 nil을 리턴한다.

 


IUO타입 -Implicitly Unwrapped Optionals(암시적 추출 옵셔널 타입)?

 

(제한적인 상황에서) 벗겨질 준비가 되어있는 타입

  • 옵셔널 타입(String?)과 동일하다고 생각해도 무방함
  • 제한적인 경우 암묵적으로 추출. 벗기지 않고 옵셔널 타입처럼 사용도 가능
  • 옵셔널 타입이 아닌 변수/상수에 저장하는 경우 자동 추출
  • nil을 할당할 수도 있지만 로직상 값이 항상 있다는 것이 확실할 때 사용
  • 스토리보드와 Outlet연결 시 주로 활용
  • 옵셔널 체이닝 . (접근연산자)를 사용할 때 ? 를 사용하지 않아도됨
개발자가 실수할 가능성을 낮춰준다  ==>  옵셔널 체이닝이 필요 없기 때문

저작자표시 비영리 동일조건 (새창열림)
    'SWIFT' 카테고리의 다른 글
    • [Swift] 날짜와 시간데이터를 사용하기
    • [Swift] 접근 제어(Access Control)
    • [Swift] Result Type
    • [Swift] 에러처리(Error Handling)
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바