아삭아삭 iOS 개발

[Swift 독학] 패스트캠퍼스 챌린지 16일차_옵셔널 추출 본문

Swift

[Swift 독학] 패스트캠퍼스 챌린지 16일차_옵셔널 추출

바닐라머스크 2022. 2. 8. 23:31

옵셔널 값을 추출(optional unwrapping) 방법에는 크게 2가지 명시적 해제와 묵시적 해제가 존재합니다.

보다 세분화해서 살펴보면 각각 강제 해제/비강제 해제, 비교연산자 이용 해제/! 이용 해제 등으로 작게 4가지 방법을 사용할 수 있습니다.

방법 하나하나 예시를 들어가며 살펴보겠습니다.


※ 주의!  본 게시물은 개인 공부 기록용이므로 내용에 오류가 있을 수 있습니다.

 

반응형

■ 명시적 해제

1-1. 강제 해제 (force unwrapping)

  • 옵셔널로 선언된 변수 뒤에 ‘!’를 붙여서 적용
  • '!'는 옵셔널 강제 해제 연산자
  • 옵셔널 값을 추출하는 위험한 방법
    → 값이 nil인 옵셔널을 강제로 해제할 경우, 값이 없으므로 런타임 오류가 발생하며 프로그램 강제종료될 가능성 존재
var someValue: Int? = 7
print(someValue) // 결과 : “Optional(7)\n”
print(someValue!) // 결과 : “7\n”

 

1.2 비강제 해제 (=옵셔널 바인딩; optional binding)

  • 강제 해제보다 안전한 방법
  • if-let 구문 활용 가능
    → 옵셔널을 추출하여 할당받은 변수(또는 상수) 이름 앞에 if-let 를 표기
    → 만약 추출이 실패할 경우, else 구문 실행
    → 여러 옵셔널 변수들을 쉼표(,)를 사용하여 한번에 바인딩 가능
    (단, 옵셔널 바인딩한 값은 if 블록 내에서만 사용 가능. else 블록에서도 불가)
var someValue: Int? = 7

if let result = someValue {
  print(someValue) 
} // 결과 : “7\n”

 

  • guard-let 구문 활용 가능
    → 옵셔널 값을 추출하여 할당할 변수(또는 상수) 이름 앞에 guard-let를 표기 
    → guard문 다음, 함수 전체 구문에서 추출된 변수나 상수 사용 가능
    → guard문은 조건이 true일때만 guard문을 통과, false면 else구문을 실행시킨 뒤 종료
func someFunc() {
  let someValue: Int? = 7
  guard let result = someValue else { return }
  print(result)
}

someFunc() // 결과 : “7\n”

 

■ 묵시적 해제

2-1. 컴파일러에 의한 자동 해제

  • 비교연산자를 사용
  • 옵셔널을 비교연산자를 이용하여 다른값과 비교시
    컴파일러가 옵셔널을 자동으로 해제
let someValue: Int? = 7

if someValue == 7 {
  print(“someValue는 7입니다.”)
} else {
  print(“someValue는 7이 아닙니다.”)
} // 결과 : “7\n”

 

2-2. 옵셔널의 묵시적 해제

  • 값을 사용할때 자동으로 옵셔널이 해제가 되는 것
  • 반환타입 뒤에 (옵셔널임을 나타내는)? ! 변경하여 묵시적 옵셔널 해제
  • 일반값처럼 자유롭게 연산작업 가능
let thisYear = “2022”

<옵셔널 해제 없이 실행할 경우>
var threeYearLater: Int? = Int(thisYear) // 결과 : 2022
print(threeYearLater + 3) // 결과 : 에러발생


<옵셔널의 묵시적 해제 적용할 경우 (? → ! 로 변경)>
var threeYearLater: Int! = Int(thisYear)  //  결과 : 2022
print(threeYearLater + 3) // 결과 : “2025\n”

 

 

 

 

 fast campus강의  참조자료

[1] https://blog.yagom.net/550/

[2] https://bbiguduk.gitbook.io/swift/language-reference/types#optional-type

 

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.