SWIFT

[Swift] 디버깅(테스트/검증)함수 assert, precondition

clamp 2023. 3. 20. 11:57

디버깅(테스트/검증)함수

  • 앱을 테스트 하면서, 런타임동안 발생할 수 있는 여러 버그의 가능성, 잘못된 코드의 검증등을 수행하도록 도와주는 함수
  • print(), dump() 일종의 디버깅 함수이다. 어떤 코드들이 입력되는지 콘솔창을 통해 확인/검증 할 수 있으므로.

 

디버깅 함수

  • assert()
  • assertionFailure()
  • precondition()
  • preconditionFaulure()
  • fatalError()

assert()  ➡️ 실제 앱을 출시시, 일부러 앱을 종료시켜야하는 상황은 아니지만, 디버그 모드에서 검증

예)  레이블에 20 % / 30% /... 100% 표시한다고 했을때, -10%라고 표시된다고 굳이 앱을 종료시켜야 하는가?

 

precondition() ➡️ 실제 앱을 출시시에도 앱을 의도적으로 종료시켜야 하는 상황

예) 앱의 업데이트로 인해, 버전이 업데이트 되었는데, 이전 버전을 사용중이라면 서버와의 통신이 잘못될 수 있기 때문에 종료시켜야함.

 

assert()

public func assert(_ condition: @autoclosure () -> Bool
                   , _ message: @autoclosure () -> String = String()
                   , file: StaticString = #file
                   , line: UInt = #line)
  • 앱을 출시하기 이전인 디버깅 모드에서만 동작한다. 배포하는 애플리케이션에서는 동작하지 않으며 그러므로 코드를 주석처리나, 삭제할 필요가 없다.
  • 개발중에 실수나 잘못된 가정을 찾는데 도움이 된다.
condition: 에러의 발생 조건
message: 에러 발생 시 커멘드라인에 띄울 메시지

 

assertionFailure()

@inlinable public func assertionFailure(_ message: @autoclosure () -> String = String(),
                                        file: StaticString = #file,
                                        line: UInt = #line)
  • assert()와 같다.
  • assert()와 다르게 조건을 입력할 수 없으므로 분기처리 후 사용해야한다.
message: 에러 발생 시 커멘드라인에 띄울 메시지

precondition()

public func precondition(_ condition: @autoclosure () -> Bool
                         , _ message: @autoclosure () -> String = String()
                         , file: StaticString = #file
                         , line: UInt = #line)

 

  • 디버깅 모드와 배포되는 애플리케이션 모두에서 동작한다.
  • production에서 이슈를 발견하는데 도움이된다.

 

preconditionFailure()

public func preconditionFailure(_ message: @autoclosure () -> String = String()
                                , file: StaticString = #file
                                , line: UInt = #line) -> Never