Unsafe Swift - WWDC20 - Videos - Apple Developer
Apple Developer
"안전한 API란 모든 가능한 입력값에 대해 일관된 결과를 낸다는 뜻이지, 크래시가 안난다는 뜻이 아니다."
nil인 옵셔널 변수를 강제로 언래핑 하면 크래시가 납니다. 항상 같은 결과를 내기 때문에 이 API는 안전하다고 볼 수 있는 것이고, 이와 다르게 unsafelyUnwrapped는 리시버가 nil인 경우 크래시가 날 수도 있고, 쓰레기 값이 반환될수도 있습니다. 명확히 정의된 결과가 없기 때문에 안전하지 않은 API 인 것이죠.
하지만 이걸 앱에도 적용할 수 있을까요?
API 개발자가 아니라 앱 개발자라면 크래시는 무조건 피해야 하는 결과라고 생각합니다. 앱 크래시는 API의 크래시와 다르게 당하는 사람(?)이 왜 이런 결과가 나왔는지 알 수 없기 때문입니다. 그래서 결코 "의도한 크래시"라는건 있을 수 없습니다. 개발자가 처리하지 못한 에러 만 있을 뿐이죠. 앱은 크래시를 내는 대신 에러 화면으로 최종 사용자에게 에러를 보여주고 다음 행동을 추천해줘야 합니다.
여러분들의 생각은 어떤가요?
https://developer.apple.com/videos/play/wwdc2020/10648/
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 10월 23일 오후 2:53
여러 개발 관련 서적에서 빨리 실패하라고 하는데 이게 우회하지 말고 오류 상황일때는 죽게 둬서 Crash report 올라오는 것이나 테스트 중에 빨리 발견하라는 것인지 잘 모르겠네요. 습관적으로 서버에서 null을 줄수도 있다고 생각해서 모든 field를 nullable로 처리해왔는데..
@이영준 저는 크리티컬한거는 assert로 디버그 빌드에서는 크래시내서 개발자가 빨리 발견하게 하고 프로덕션에서는 크래시 안나게 에러 처리하려고 합니다.
@이영준 모든 필드 nullable 처리는 상상만 해보고 실제로는 해본적이 없네요. 마음으로는 크래시를 안나게 하기 위해 그렇게 하는게 좋다고 생각하는데, 실용성 측면에서 타협을 했어요ㅋㅋ
assert 한번도 안써보고 다 ??로 default 처리하거나 guard로 예외 처리 했는데 그것도 한번 써봐야 겠네요...
“우리가 작은 전투 몇 개를 이기는데만 집중해서 전쟁에 진다면 창피할 것이다. 스타트업에서 전쟁이란 살아남는 것이다. 전쟁이란 제품을 시장에 내 놓기 전에 돈이 떨어지지 않게 하는 것이다.” - 스티브 잡스
1. 사람들이 자연스럽게 갖기 쉬운 프레임은 대개 하위 수준이다.