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)
글쓰기 / 관리자

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • uikit
  • Q
  • Swift
  • ㅅ

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
clamp

Clamp

[Swift] Never타입과 fatalError()
SWIFT

[Swift] Never타입과 fatalError()

2023. 3. 20. 11:02

 Never 타입

  • 제어권을 호출한 위치로 return하지 않는다.
  • Never타입은 빈 열거형으로 선언되어있다.
  • 빈 열거형이므로 인스턴스를 생성할 수 없다
    • ex) let day: Weekday = Weekday.monday // 인스턴스 생성 불가
    • let some = Never()  // 생성 불가

 

 

⭐️함수의 return의 의미⭐️

  • 함수의 결과로 만들어진 값을 리턴한다.
  • 함수 내부로 전달된 CPU실행의 제어권을 함수를 호출한 부분으로 돌려준다.

 

❓일반적인 함수의 흐름

                                        //코드위치
func addTwoNumbers(a: Int, b: Int) -> Int { //1
    var c = a + b                           //2
    return c                                //3
}

//@main
var num1 = 5                                //4
var num2 = 3                                //5


var num3 = addTwoNumbers(a: num1, b: num2)  //6
print(num3)                                 //7

일반적인 코드의 흐름은 main으로부터 시작된다.

4번, 5번, 6번이 실행되고 6번에서 실행된 addTwoNumbers의 정의부분인 1번으로 이동하여 1, 2, 3번일 실행될것이다.

이 때 3번에서 return이 일어나게되고 c와 CPU의 제어권을 6번 코드로 return하게 된다.

 

 

❓Never타입과 CPU제어권을 NonReturning하는 함수

                                            //코드위치
func addTwoNumbers(a: Int, b: Int) -> Never { // 1
    fatalError("앱이 해킹됨")                    // 2
}

//@main
var num1 = 5                                  // 3
var num2 = 3                                  // 4
 
var num3 = addTwoNumbers(a: num1, b: num2)    // 5
print(num3)				      // 6

addTwoNumbers 함수는 Nonreturning 함수가 되었다

명시적으로 제어권을 전달하지 않는다는 것을 표시하기 위해 Never(네버)타입으로 선언되었다.

 

함수의 흐름을 보자.

3, 4번 코드가 실행되고 5번코드에서 addTwoNumbers가 호출된다.

1번으로 이동하지만 이는 Nonreturning함수이기 때문에 5번코드로 CPU의 제어권을 돌려주지 않는다.

fatalError()함수 또한 Never를 리턴하는 함수로 내부가 정의되어있다.

그러므로 6번 코드는 실행되지 못하고 종료된다

 

fatalError()함수의 선언부

public func fatalError(_ message: @autoclosure () -> String = String(), 
			file: StaticString = #file, line: UInt = #line) -> Never
            
// message: 에러가 발생할 때 표시하려고 하는 메시지(콘솔)
// file: (에러발생) 파일 이름
// line: (에러발생) 라인번호
// 리턴타입: Never 타입

 

사용하는 이유⭐️

  • 런타임에 발생할 수 있는 에러를 미리 발견하고 검증/테스트 하기 위해
  • 심각한 에러가 발생하면 앱을 종료시키기 위해

 

저작자표시 비영리 동일조건 (새창열림)
    'SWIFT' 카테고리의 다른 글
    • [Swift] #keyPath
    • [Swift] 디버깅(테스트/검증)함수 assert, precondition
    • [Swift] CaseIterable 프로토콜
    • [Swift] Comparable 프로토콜
    clamp
    clamp
    주니어 iOS개발자의 발악!!!!!!!

    티스토리툴바