에러처리
에러처리 목차
(에러처리의 개념)[#에러처리의-개념]
에러의 종류
에러처리
(에러 처리 방법)[#에러-처리-방법]
try catch (try 문)
(Defer문)[#Defer문]
에러처리의 개념
컴파일 오류
문법적 오류 (에러)
Swift 문법과 관련된 에러이다. (컴파일러가 알려줌)
런타임 오류
앱 실행 중 다양한 이유로 발생 → 앱의 종료
발생 가능한 에러는 미리 처리해야함.
참고: 크래시 (앱의 강제 종료)
에러 처리가 필요한 이유
와이파이 이슈, 서버 이슈 등 다양한 오류가 발생할 수 있음 → 처리를 해 줘야돼!
앱이 무작정 꺼지지 않도록 처리하는 것.
사용자 경험과 관련해서 중요함. (알려주든지, 재시도를 요청하든지)
에러처리
어떤 상황이 발생했을 때, 비정상적인 경우 (에러를 던짐) 를 정의하는 것.
에러 처리의 과정 (3단계)
에러 타입 정의
Error 프로토콜을 채택한 에러 열거형을 정의한다.
Error 프로토콜을 채택하면 정의한 타입 열거형이 Swift의 에러 프로토콜 내로 통합된다.
어떤 에러가 발생할지 미리 정의하는 것이다.
에러가 발생할 수 있는 함수를 정의한다.
각 에러의 종류 (비정상적인 경우)를 분류하여 리턴
throw
키워드로 던짐
에러를 처리한다. (함수의 실행)
try
와do
-catch
문으로 처리한다.
예제
try문
정석적인 트라이 try
try
try , do - catch로 사용
모든 에러 발생의 예외적인 경우를 디테일하게 처리 가능
해당 사용에 익숙해져야한다.
옵셔널 트라이 try?
try?
옵셔널 타입으로 리턴
정상적인 경우, 리턴 타입으로 리턴
에러 발생 시, nil 리턴
값 사용 시 옵셔널 값을 unwrapping해서 사용해야함.
let data = **try?** parsing()
forced 트라이 try!
try!
에러가 날 수 없는 경우에만 사용
정상적인 경우 리턴 타입으로 리턴
에러가 발생하면 런타임 에러
오류가 없다고 확신할 수 있을 때에만 사용한다. (제한적 사용)
let data = **try!** parsing()
catch 블럭의 구체적인 처리 법
catch 옆에 case를 쓸 수 있다. (에러를 따로 처리하는 경우)
패턴을 모두 정의 (경우를 모두 따로 처리)
패턴 없이 에러를 받아서 처리 (다운캐스팅 후 사용)
catch블럭 내에서 error 상수를 제공한다.
error 상수(error 프로토콜 타입)을 구체적으로 정의한 타입으로 캐스팅하여 switch문 등으로 다시 처리한다.
Defer문
defer문?
어떤 동작을 마지막으로 미루는 방법이다.
일반적으로 어떤 동작의 마무리 동작을 특정하기 위해 사용한다.
코드의 실행을 스코프가 종료되는 시점으로 연기시키는 문법이다.
예시
일반적으로 어떤 동작의 마무리 동작을 특정하기 위해 사용한다. (정리 개념)
defer문을 왜 사용할까?
동작의 마무리를 까먹을 수 잇어서..?
함수에서만 쓸 수있는 것이 아니고, for문에서도 사용할 수 있따.
DEFER
어떤 동작을 마지막으로 미루는 방법
일반적으로 어떤 스코프 내 동작을 마무리하기 위해 사용된다.
defer문은 한 번은 호출되어야지만, 해당 구문이 실행된다.
Last updated