👨‍🎓
Today I Learned
  • Today-I-Learend
  • 🍎WWDC
    • Developer Tools
      • Testing in Xcode
    • UIKit
      • UIDiffableDataSource
        • [WWDC 19] Advances in UI Data Sources
      • [WWDC2019] Advances in CollectionView Layout
  • 자료구조
    • Heap 자료구조
  • Clean code
    • 네이밍
    • 주석과 포맷팅
    • 함수
    • 클래스
    • 에러 핸들링
    • 가독성 높이기
    • 객체지향
  • Network
    • RestAPI
  • Swift
    • DateType
    • ARC
    • Availablity
    • KeyPath
    • Network
    • Never타입
    • Result
    • Selector
    • 검증함수
    • 메타타입
    • 동시성 프로그래밍
    • 메모리 안전
    • 에러처리
    • 접근제어 (Access Control)
    • 제네릭
    • 주요 프로토콜
  • 알고리즘
    • 그래프
    • 기초 알고리즘
    • 누적합(Prefix)
    • 복잡도
    • 비트마스킹
  • 운영체제
    • 운영체제의 개요
    • 프로세스와 스레드
    • CPU 스케줄링
    • 프로세스 동기화
    • 교착상태
    • 07. 메모리
    • 08.가상 메모리
    • 입출력 장치
    • 파일 시스템
  • UIKit
    • UITableView xib으로 만들어보기
  • 🖊️정보 기록
    • 코코아팟 배포하는 방법
  • iOS Project
    • 채팅 앱 만들기
      • Trouble shooting
      • 1. 디자인
      • 2. AutoLayout
    • 날씨 조회 어플리케이션
      • Figma를 이용한 UI 설계
      • TableView 연결하기
      • Networking
    • MVC -> MVVM으로 구조 변경해보기
      • MVC
      • MVVM
    • OAuth Project
      • 로컬 호스트를 이용한 로그인 페이지 제작
      • Github의 OAuth App 설정
    • Rest API 프로젝트
      • UI설계 (with Figma)
      • Network Model
      • MVVM 구조 전환
  • 🕶️UIKit
    • Compositional Layout
Powered by GitBook
On this page
  1. Swift

Never타입

일반적인 함수의 return의 의미

  1. 함수 결과 값의 리턴

  2. CPU 제어권 리턴

func addTwoNumbers(a: Int, b: Int) -> Int {
    var c = a + b
    return c // 값의 리턴 뿐만 아니라 제어권을 돌려줌.
}

var num1 = 5
var num2 = 3

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

Never 타입

💡 Never 타입을 반환하는 함수 또는 메서드란, 함수 또는 메서드가 제어권을 비반환(nonreturning)하는 함수이다. 이는 복구할 수 없는 에러를 발생시키거나 무한으로 작업을 시작한다.

  • 앱을 테스트, 검증하는 단계에서 사용한다.

  • CPU의 제어권을 돌려주지 않는다.

    • 일부러 크래시 (에러)를 발생시킨다. (Nonretruning이라고 말한다)

  • Never 타입 = 임시 타입

    • 내부적으로 비어있는 열거형으로 선언된다.

    • 실질적인 인스턴스를 생성할 수 없다. (Uninhabited Type)

    • 임시적인 타입으로 인스턴스 생성이 불가능하다.

      • let some = Never() // 불가능

      • 열거형이지만, let day: Weekday = Weekday.monday 식의 인스턴스 생성 불가능

  • 활용 방법

    • 함수 내에서 무조건 앱을 종료시킨다.

    • 무조건 에러를 발생시켜 에러 처리하는 코드로 제어권을 전달한다.

  • 활용 방법

    • 함수 내에서 앱을 종료시킨다.

    • 무조건 에러를 발생시켜서 에러 처리하는 코드로 제어권을 전달한다. ( 드문 케이스 )

      func crashAndBurn() -> Never {
          fatalError("앱의 해킹이 발견됨") // 특별한 경우에 사용하는 함수. Never타입을 가지고 있는 함수
      }
      
      print("1")
      crashAndBurn()
      print("2") // WARNING: - Will never be executed

사용하는 이유

  • 런타임에 발생할 수 있는 에러를 미리 발견하고 검증 및 테스트하기 위해서 사용한다.

  • 가벼운 에러라면, 출시할 때에는 해당 코드를 삭제해야한다. (해킹같은 경우는 종료시켜야한다)

  • 출시 이전에 앱을 무한대로 테스트할 때, fatal error를 사용한다.

    • 검증함수

      • assert()

      • precondition()

    // 1) 에러 정의
    enum SomeError: Error {
        case aError
        case bError
    }
    
    // 2) 에러를 던지는 함수의 정의
    
    func someThrowingErrorFuncion() throws -> **Never** { // 실무에서는 에러를 던지지는 않음
        if true {
            throw SomeError.aError
        } else {
            throw SomeError.bError // WARNING: - Will never be executed
        }
    }
    
    // 3) 에러를 던지는 함수의 실행
    
    do {
        try someThrowingErrorFuncion()
    } catch {
        print(error)
    }

PreviousNetworkNextResult

Last updated 2 years ago