Old_SWIFT(221012)/기본이야기

Error타입부터 try, do, catch까지...(모든건 Result 타입을 위해)

KataRN 2022. 10. 5. 13:24
반응형

안녕하세요. KataRN입니다.

 

오늘은 Error 처리부터 try, do, catch에 대하여 알아보겠습니다.

(Result타입에 대해 글을 쓰기전에 선행학습이 필요하다 판단하여 글을 쓰게되었습니다.)

 

Swift에서 Error는 Error 프로토콜을 채용한 타입의 값으로 나타냅니다.

보시면 공식문서에도 적혀있듯이 Error 프로토콜은 요구되는게 하나도 없습니다.

 

우선 에러타입을 하나 만들겠습니다.

enum DivisionError: Error {
  case dividedByZero
}

 

그리고  Error를 사용하는 방법에 대해 알려드립니다.

throw, throws가 있습니다. 두개는 다릅니다.

 

📍 throw

에러를 발생시키는 키워드입니다.(에러를 던진다 라고 표현합니다.)

throw DivisionError.dividedByZero

 

📍throws

메서드, 생성자, 클로저가 내부에서 Error를 throw할 수 있을 때 사용하는 키워드입니다.

func division(numerator: Int, denominator: Int) throws {

  if denominator == 0 {
    throw DivisionError.dividedByZero
  }
    
  else {
    let result = numerator / denominator
    print(result)
  }
}

 

함수내부에 throw로 Error를 던지기 때문에 throws를 추가하였습니다.

함수에 대해 간략하게 설명하자면 나눗셈을 하는데 0으로 나눌 경우 에러가 나오도록 하였습니다.

함수를 한번 실행해볼게요.

옆에 보시면 try를 사용해?라고 나옵니다.

 

이제 try에 대해 알아보겠습니다.

try는 (try, try?, try!)3가지가 있습니다.

 

📍 try 

- 예외 상황을 다루기 위한 방법의 do ~ catch 문을 사용해야 온전히 에러 처리를 할 수 있습니다.

- 기능은 try ~ catch 방식과 동일하고 do문 내에서 try한 메서드에 에러가 발생하면 앱이 종료되지 않고 catch 문에서 처리합니다.

 

do {
  try division(numerator: 10, denominator: 0)
  print("Valid Division")
}
catch DivisionError.dividedByZero {
  print("Error: Denominator cannot be 0")
}

- do 안에 try와 함수를 넣고 catch에는 에러가 날경우 case와 처리를 같이 적어주면됩니다.

- catch뒤에 Error타입을 적지 않으면 default로 적용됩니다.

 

 

📍try?

- 에러가 발생하면 nil리턴, 발생하지 않으면 Optional타입으로 리턴

- 0으로 나누면 에러가 발생하여 nil 처리 됩니다.

- 5로 나누면 문제가 없음으로 result가 프린트됩니다.

 

📍try!

- 함수 강제 실행 (런타임 오류 발생 가능)

 

- 참고 : https://www.programiz.com/swift-programming/error-handling

 

이 모든건 Result타입을 설명하기 위해서 였습니다.ㅎㅎ

바로 Result타입에 대해 작성하겠습니다.

 

오늘도 긴글 읽어주셔서 감사합니다.

 

 

 

 

반응형