트랙
/
Go
Go
/
연습 문제
/
오류 처리
오류 처리

오류 처리

보통

지침

다양한 종류의 오류 처리와 리소스 관리를 구현해요.

프로그래밍에서 중요한 점 중 하나는 오류가 발생하더라도 오류를 처리하고 리소스를 닫는 방법이에요.

이 연습 문제에서는 다양한 오류를 처리해야 해요. 오류 처리는 프로그래밍 언어마다 차이가 크기 때문에, 정확히 무엇이 필요한지 확인하려면 해당 트랙의 테스트를 참고해야 해요.

구현

Go의 오류나 패닉이 처음이라면, 맥락을 파악하기 위해 이 주제들에 관한 문서를 먼저 읽어 보는 것을 추천해요.

이 연습 문제에서는 리소스를 열고, 그 결과 리소스에 대해 Frob(input)을 호출한 다음, 어떤 경우에도 그 리소스를 닫는 함수 Use(opener ResourceOpener, input string) error를 정의해야 해요. 함수는 오류와 패닉을 제대로 처리해야 해요.

ResourceOpener opener는 리소스를 "열기" 위해 opener()처럼 직접 호출할 수 있는 함수예요. 이 함수는 관용적인 Go 방식으로 Resource와 오류 값을 반환해요.

Resource, ResourceOpener, FrobError, TransientError의 정의는 common.go 파일을 참고하세요. 해답은 common.go와 error_handling_test.go와 같은 패키지인 "erratum"에 작성하게 돼요. 그래야 해답에서 그 타입들을 사용할 수 있어요.

Use 함수에서 오류가 발생할 수 있는 곳은 몇 군데예요.

  • 첫 번째 매개변수로 Use에 전달된 ResourceOpener 함수를 호출할 때, 이 함수가 TransientError 타입의 오류와 함께 실패할 수 있어요. 그렇다면 리소스를 열기 위해 계속 시도해야 해요. 다른 종류의 오류라면 Use 함수에서 그 오류를 반환해요.

  • ResourceOpener 함수가 반환한 Resource에 대해 Frob 함수를 호출할 때, FrobError(또는 다른 타입의 오류)와 함께 패닉이 발생할 수 있어요. 정말로 FrobError라면, 패닉을 일으킨 FrobError의 .defrobTag 변수를 Defrob 함수의 입력으로 사용해서 리소스의 Defrob 함수를 호출해야 해요. 어느 쪽이든 Use는 그 오류를 반환해야 해요.

  • 또한 참고하세요: Resource가 성공적으로 열렸다면, 무슨 일이 있어도(오류가 발생했더라도) 그 Close 함수를 정확히 한 번 호출해야 해요.

특정 오류 타입인지 테스트하는 것은 타입 단언으로 할 수 있어요. 패닉 복구에서 오류 정보를 반환하는 유용한 방법으로 이름 있는 반환 값도 살펴보면 좋아요.

GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Go Exercism

오류 처리 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Go 트랙을 개념 34개연습 문제 165개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.