[머릿말]
이제 본격적으로 Swift 공부를 시작하였다. 전체 요약 부분을 보다가 assert와 precondition을 보게 되었다. 이 둘은 조건을 확인해서 조건이 거짓이라면 해당 부분에서 오류 메시지를 띄우고 프로그램을 종료시키는 역할을 한다. 목적 또는 역할이 분명 차이가 있으므로 각각이 존재하는 것일텐데 어떤 점이 다른 건지 궁금해졌다. 그래서 관련 내용을 찾아보았고 이해한 내용을 기록하려 한다.
1. Assert? Precondition?
1-1. Assert
Assert(역설)은 실행 중 발생하는 조건의 결과에 따른 진행 방향을 설정하는 것이다. 조건이 참이라면 코드는 계속 실행되지만 조건이 거짓이라면 프로그램은 종료되고 해당 줄 번호와 함께 미리 정의해둔 오류 메시지가 콘솔에 출력된다. 형태는 다음과 같다.
// [형태]
assert(조건식, "오류 메시지")
// ex)
let year: Int = 2025
assert(year == 2024, "This year is 2024")
// [실행 결과]
// > (...)5: Assertion failed: This year is 2024
1-2. Precondition
Precondition(전제조건)도 Assert와 동일하게 실행 중 발생하는 조건의 결과에 따라 계속 실행되거나 미리 정의한 오류 메시지를 출력하고 프로그램을 종료하는 역할을 한다. 형태도 비슷하다.
// [형태]
precondition(조건, "오류 메시지")
// ex)
let numArr: Array = [0, 1, 2, 3, 4]
let index: Int = 5
precondition(index >= 0 && index <= numArr.index(before: numArr.endIndex), "Index out of range")
// [실행 결과]
// 9: Precondition failed: Index out of range
2. 무엇이 다른가? :: What's the difference?
- assert는 release build에서는 성능에 영향을 주지 않기 위해 disabled 되지만 precondition은 그렇지 않다.
- assert는 그렇게 치명적이지는 않지만 개발 과정에 있어 버그를 확인하기 위한 용도로 사용한다.
- precondition은 발생한다면 예측할 수 없는 결과를 야기하거나 프로그램 상태에 변질을 야기할 수 있는 조건을 위해 사용한다.
내가 이해한 바로는 위 내용과 같다. precondition은 정말 절대 발생해서는 안되는 오류, 발생한다면 앱에 치명적인 문제를 일으킬 수 있는 오류를 확인하기 위한 용도로 사용하는 것 같고, assert는 개발 과정에서 디버깅, 오류 확인의 용도로 사용하는 것 같다. 이 둘은 모두 디버깅, 개발 과정을 위한 도구이지만 Error Handling 목적으로는 사용해선 안된다고 한다. 만약 Error Handling이 목적이라면 optional binding, throwing and catching error 등의 방법을 사용해야 한다고 한다.
참고: https://medium.com/@mail2amitrawal/assertions-and-preconditions-in-swift-a58888b1e1ea
'[Programming Language] > [Swift]' 카테고리의 다른 글
[Swift] 집합(Set), 집합 선언, count, isEmpty, 추가(insert), 삭제(remove), contain, for ~ in, 집합 연산, isSuperset, isSubset, isDisjoint (0) | 2024.07.06 |
---|---|
[Swift] 배열(Array), 배열 선언 방법, 추가, 수정, 삭제, count, isEmpty, for ~ in (0) | 2024.07.05 |
[Swift] 문자열(Strings), 문자열 내에 변수 출력 방법, 여러줄 문자열, 문자열 결합 (1) | 2024.07.03 |
[Swift] 연산자(대입, 산술, 복합 대입, 비교, 삼항, Nil 결합, 범위, 논리) (0) | 2024.07.01 |
[Swift] iOS 개발자로의 첫 걸음 (0) | 2024.06.30 |