Swift 에서 Never 란 무엇일까?

Software Engineer
2 min readMar 3, 2022

--

주로 Combine 을 사용하다 보면 Never 타입을 볼 수 있습니다. Never 는 왜 사용하고 어떤때에 사용하는 것일까요?

Never 에 간단하게 알아보도록 하겠습니다. 먼제 공식문서에는 아래와 같이 설명이 되어 있습니다.

The return type of functions that do not return normally, that is, a type with no values.

Overview

Use Never as the return type when declaring a closure, function, or method that unconditionally throws an error, traps, or otherwise does not terminate.

func crashAndBurn() -> Never {
fatalError("Something very, very bad happened")
}

살펴보기

일단 타입은 enum 입니다. Never 타입 자체에는 큰 의미는 없는 것 처럼 보입니다. 중요한 것은 Never 가 무엇을 의미하는가 입니다.

위 공식문서의 코드를 보면 fatalError 의 코드를 따라가다 보면 리턴 타입이 Never 임을 확인할 수 있습니다. 함수 이름과 리턴 타입만 봐도 뭔가 실행을 하면 안될 것 같은 느낌입니다.

아래코드는 Alamofire 의 일부 코드입니다. 해당 코드는 Result 의 Error 부분이 Never 로 처리되어 있습니다. 또한 아래 코드를 통해 Never 는 Error 프로토콜을 따르고 있는 것을 확인할 수 있습니다.

public func result() -> AnyPublisher<Result<Value, AFError>, Never> {
map(\\.result).eraseToAnyPublisher()
}

언제 사용할까?

Never 는 코드에서 실행되면 안되는 부분을 명시적으로 나타냅니다.

위에 내용처럼 Never 를 이용해서 코드를 볼 때 ‘아 이부분은 실행이 되면 안되는 부분이구나’ 라고 판단할 수 있을 것입니다. 앱을 강제 종료 해야 한다거나, UIEvent 에 Error 를 써야 할 때 활용할 수 있을 것 같습니다.

참조

swift/Policy.swift at master · mdiep/swift

잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다.

--

--