KWiOS
KWiOS0101
KWiOS
  • 분류 전체보기 (108)
    • Algorithm (41)
      • 이코테 (14)
      • 이코테 문제풀이 (21)
      • 프로그래머스 (6)
    • CS (1)
      • 모두를 위한 컴퓨터 과학(CS50 2019) (0)
    • iOS (15)
    • Swift (36)
      • Swift문법 (32)
      • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 6

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
KWiOS

KWiOS0101

Swift/Swift문법

Swift문법 - Optional

2023. 1. 15. 01:43

Optional

Optional은 nil을 사용할 수 있는 타입과 없는 타입을 구분하기 위해 사용하며

nil을 사용할 수 있는 Type을 Optional Type이라 부른다.

let optional: String? = nil // 옵셔널 타입
let nonOptional: String = "Test" // 넌 옵셔널 타입

Optional 타입을 사용하기 위해서는 타입 뒤에 ? 를 붙여 사용하며

만약 Non-Optional 타입에 nil을 할당하게되면 에러가 발생하므로 주의해야한다.

let nonOptional: String = nil // 에러

 

Optional 변수에 초기값을 지정해주지 않으면 기본값은 nil이다.

let optional: String? // nil

 

Optional타입 변수를 Non-Optional타입 변수에 대입하도록 했을 경우에도 에러가 발생한다.

let optionalStr: String? = "ABCDE"
let engStr: String = optionalStr // 에러 발생

Optional 타입의 값을 프린트문으로 출력해보면 Optional()로 감싸져 있다.

let optionalStr: String? = "Test"
print(optionalStr) // Optional("Test")

 

이때 Optional()로 감싸져 있는 속알맹이 값을 꺼내는 행위를 Unwrapping이라고 한다.

 

강제추출(Forced Unwrapping)

강제로 옵셔널로 랩핑되어 있는 값을 추출하는 방법으로 옵셔널 값 뒤에 ! 를 붙인다. 

강제 추출을 사용할 때 옵셔널 값이 있을 경우에는 문제가 없지만, 만약 값이 없는 경우에는 에러가 발생한다.

var forcedUnwrapping: String? = "Test"
print(forcedUnwrapping) // Optional("Test")
print(forcedUnwrapping!) // Test

forcedUnwrapping = nil
print(forcedUnwrapping!) // Error!!

위 결과에서 보이듯이 값이 확실히 있다고 보장되는 경우에만 사용하는것이 좋다. 

 

옵셔널 바인딩(Optional Binding)

옵셔널을 안전하게 처리하는 방법으로 if문과 guard문을 사용하여 옵셔널 값을 추출한다. 

if let 

var optionalStr1: String? = "Test"

if let unwrapping = optionalStr1 {
    print("옵셔널 바인딩 성공", unwrapping)
} else {
    print("옵셔널 바인딩 실패")
}

if let은 옵셔널 바인딩에 성공한 경우 unwrapping 상수를 if문 내부에서만 사용 가능하다.

 

guard let 

var optionalStr2: String? = "Test"

func optionalFunc(_ name: String?) { 
	guard let unwrapping = name else { return }
    
    print(unwrapping) // Test
}

guard let에서는 옵셔널 바인딩에 성공한 경우 unwrapping2 상수를 함수 내부의 지역 상수처럼 사용 가능하다.


Nil-Coalescing Operator

?? 를 사용하여 옵셔널 값이 있는 경우에는 옵셔널을 벗긴 값을 반환하고 값이 nil인 경우에는 지정한 값을 반횐하도록 한다.

 

아래 코드는 Nil-Coalescing Operator를 사용하지 않고 언랩핑하는 코드이다.

var optionalStr: String? = "Test"

if let unwrapping = optionalStr {
    print(unwrapping)
} else {
    print("언랩핑 실패")
}

위 코드를 Nil-Coalescing Operator를 사용하여 언랩핑 하게되면 아래 코드처럼 작성 가능하다.

let unwrapping = optionalStr ?? ""
print(unwrapping)

 

 

 

'Swift > Swift문법' 카테고리의 다른 글

Swift문법 - Closure  (0) 2023.01.28
Swift문법 - Functions  (0) 2023.01.22
Swift문법 - Control Transfer Statements, Labeled Statements  (0) 2023.01.08
Swift문법 - Loop Statements  (0) 2022.12.23
Swift문법 - Conditional Statements(if, switch, guard)  (0) 2022.12.10
    'Swift/Swift문법' 카테고리의 다른 글
    • Swift문법 - Closure
    • Swift문법 - Functions
    • Swift문법 - Control Transfer Statements, Labeled Statements
    • Swift문법 - Loop Statements
    KWiOS
    KWiOS

    티스토리툴바