Swift/이론

[Swift 이론] 에러 핸들링 (Error Handling)

버스트 캐넌 2023. 10. 25. 06:21

글 작성에 앞서 본 블로그의 모든 게시글은 블로그 주인의 개발 일지(일기) 형태의 게시글입니다.

정보를 나누는 방식보단, 제가 했던 방식을 공유하는 식의 글이라 읽어도 제대로 이해를 못 하실 수 있거나 더 좋은 다른 방법이 존재할 수 있습니다.

이 점 양해해 주시며 본 블로그의 게시글을 읽어주시면 감사하겠습니다.

 

 

안녕하세요 버스트캐넌입니다.

 

오늘은 Swift중에서 에러 핸들링(Error Handling)에 관하여 간단하게 글을 작성해보겠습니다.

 

에러 핸들링 (Error Handling)


에러 핸들링 (Error Handling) 이란?

 

에러 처리라고도 불리는 에러 핸들링은 프로그램 실행 중 발생할 수 있는 에러나 예외 상황을 처리하는 방법을 뜻합니다.

 

왜 쓰는가?

 

에러나 예외 상황이 생겼을때, 어떤 에러인지 알려줄수 있고 예외 처리를 해줌.

 

어떻게 쓰는가?

 

간단한 예제

  • '무빙'을 보기 위해 디즈니+에 가입하려는 상황. but 디즈니+는 성인만 가입 가능
  • 나이 입력에서 성인이 아니거나, 숫자가 아닌 입력은 에러상황

 

에러가 날 경우를 enum이라는 열거형 프로토콜로 모아둘 수 있음.

 

enum ageError: Error {
    case lowAge
    case notInt
}

 

에러가 발생할 수 있는 상황을 던지기 함수를 통해 구현할수 있음.

 

func canThrowErrors(age: String) throws -> String {
    
    guard var a = Int(age) else { throw ageError.notInt }
    
    guard Int(age)! >= 20 else { throw ageError.lowAge }
    
    return "가입 완료"
}

 

이 함수 사용(호출) 방법은?

 

앞에 try를 붙여야함 -> 그냥 호출 불가능

 

try -> 실패시 에러 띄움

var personB = "18"

...

try canThrowErrors(age: personB)

lowAge라는 에러 띄움

 

try? -> 실패시 nil 반환

var personB = "18"

...

try? canThrowErrors(age: personB)

에러가 발생해 nil을 반환함

 

try! -> 실패가 없다고 가정 (비추천)

 

var personB = "18"

...

try! canThrowErrors(age: personB)

컴파일 오류가 나는 모습

 

do - catch 에러처리

 

매우 일반적으로 에러처리 하는방법

 

var personB = "18"

...

do {
    try canThrowErrors(age: personB)
    print("가입완료")
} catch ageError.notInt {
    print("숫자가 아닙니다.")
} catch ageError.lowAge {
    print("성인이 아닙니다.")
}

defer

 

코드가 종료되기 직전에 실행되는 코드

 

할당된 메모리를 정리해주는용도로 주로 쓰임

 

defer {
    print("끝납니다.")
}

defer 예시

 

defer가 여러개 있다면, 가장 밑에 있는 defer가 먼저 실행

 

defer {
    print("끝납니다.")
}

defer {
    print("이게 먼저")
}

 

 

궁금한 점이나 지적해야 할 부분이 있으시면 댓글 남겨주세요. 블로그 주인의 상황에 따라 답변이 없을 수 있으나, 최대한 피드백해 드리겠습니다.