소피it블로그
[Swift 공식문서] The Basics 정리 (9) - Assertions and Preconditions 본문
[Swift 공식문서] The Basics 정리 (9) - Assertions and Preconditions
sophie_l 2022. 5. 14. 11:47https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html
assertion과 preconditions는 런타임 시 발생한다. 코드를 더 진행시키기 전에 필수적인 조건이 충족되었는지를 확실히 하기 위해 사용한다. assertion이나 precondition의 불리언 조건이 true면, 코드는 평소처럼 진행된다. 만약 조건이 false로 판명되면 프로그램의 현재 상태가 무효한 것이 되어 실행이 끝나고 앱이 종료된다.
코딩을 하며 생기는 가정을 표현하거나 갖는 기대를 나타내어 코드에 포함시키기 뒤해 assertion과 precondition을 사용한다. assertion은 개발 과정에서 실수나 틀린 가정을 찾을 수 있게 해주고, precondition은 프로덕션 과정에서의 문제들을 찾을 수 있게 해준다.
assertion과 precondition을 사용함으로써 유효한 데이터와 상태를 강제한다면 기대하지 않은 상황이 발생했을 때 앱이 더 예측 가능한 방향으로 종료될 수 있고, 문제를 디버깅하기도 더 쉬워진다. 무효한 상태가 감지되자마자 실행을 중지함으로써 비정상적인 상태로 인해 가해지는 손실을 최소화할 수 있다.
assertion과 precondition의 차이는 체크될 때에 발생한다. assertion은 디버그 빌드에서만 체크되는 반면, precondition은 디버그와 프로덕션 빌드 둘 다에서 체크된다. 프로덕션 빌드에서는 assertion 내부의 조건은 평가되지 않는다. 즉, 개발 과정에서 원하는 만큼 assertion을 사용해도 프로덕션 과정에서는 수행에 영향을 주지 않는다는 것이다.
1. Assertion으로 디버깅하기
스위프트 스탠다드 라이브러리에서 assert(_:_:file:line:) 함수를 부름으로써 assertion을 적을 수 있다. 이 함수에는 참, 거짓을 판별해주는 표현과 조건이 false일 경우 보여줄 메시지를 넘긴다.
let age = -3
assert(age >= 0, "A person's age can't be less than zero.")
// This assertion fails because -3 isn't >= 0.
assertion 메시지를 생략해줄 수도 있다.
코드가 이미 조건을 체크하고 있다면, assertionFailure(_:file:line:) 함수를 사용함으로써 assertion이 실패했음을 보일 수 있다.
if age > 10 {
print("You can ride the roller-coaster or the ferris wheel.")
} else if age >= 0 {
print("You can ride the ferris wheel.")
} else {
assertionFailure("A person's age can't be less than zero.")
}
2. Precondition 강제하기
조건이 거짓이 될 수 있는 가능성이 있지만 코드가 제대로 돌아가기 위해서는 반드시 참이어야 할 상황에 precondition을 써주면 된다.
precondition(_:_:file:line:) 함수를 통해 precondition을 적을 수 있다. 이 함수에 참 혹은 거짓을 판별해주는 표현과, 조건의 결과가 거짓일 경우 보여줄 메시지를 넘겨준다.
// In the implementation of a subscript...
precondition(index > 0, "Index must be greater than zero.")
실패가 발생했을 경우 이를 알리기 위해 preconditionFailure(_:file:line:) 함수를 부를 수도 있다.
'개발_iOS > 스위프트' 카테고리의 다른 글
[Swift 공식문서] Closures 정리 (1) (0) | 2022.05.17 |
---|---|
[Swift 공식문서] Functions 정리 (0) | 2022.05.15 |
[Swift 공식문서] The Basics 정리 (8) - Error Handling (0) | 2022.05.14 |
[Swift 공식문서] The Basics 정리 (7) - Optionals (0) | 2022.05.14 |
[Swift 공식문서] The Basics 정리 (6) - Type Aliases, Booleans, Tuples (0) | 2022.05.12 |