PHpullh
학습 라이브러리/Go/에러 인터페이스 활용

GO · 에러처리

에러 인터페이스 활용

에러가 특정 인터페이스를 구현하는지 확인하여 동작을 결정합니다. 에러 타입에 따른 유연한 처리가 가능합니다.

에러처리중급error-interfaceretryablebehaviornet-error

핵심 설명

에러가 특정 인터페이스를 구현하는지 확인하여 동작을 결정합니다. 에러 타입에 따른 유연한 처리가 가능합니다.

Go code

package main

import (
	"fmt"
	"net"
)

// 재시도 가능한 에러 인터페이스
type Retryable interface {
	error
	IsRetryable() bool
}

type TempError struct{ Msg string }
func (e *TempError) Error() string   { return e.Msg }
func (e *TempError) IsRetryable() bool { return true }

type FatalError struct{ Msg string }
func (e *FatalError) Error() string   { return e.Msg }
func (e *FatalError) IsRetryable() bool { return false }

func handleWithRetry(err error, maxRetries int) {
	if r, ok := err.(Retryable); ok && r.IsRetryable() {
		fmt.Printf("재시도 가능: %s (최대 %d회)\n", err, maxRetries)
		return
	}
	fmt.Printf("치명적 에러: %s\n", err)
}

func main() {
	handleWithRetry(&TempError{"일시적 네트워크 오류"}, 3)
	handleWithRetry(&FatalError{"설정 파일 없음"}, 3)

	// 표준 라이브러리의 예: net.Error
	var netErr net.Error
	_ = netErr // Timeout() bool, Temporary() bool 메서드 보유
}

학습 팁

에러 인터페이스로 행동을 확인하면 구체적 타입에 의존하지 않아도 됩니다. "재시도 가능한가?"같은 질문에 적합합니다.

주의할 점

에러 인터페이스를 너무 많이 만들면 복잡해집니다. Retryable, Timeout 등 핵심적인 것만 정의하세요.

자주 묻는 질문

에러 인터페이스 활용란 무엇인가요?

에러가 특정 인터페이스를 구현하는지 확인하여 동작을 결정합니다. 에러 타입에 따른 유연한 처리가 가능합니다.

에러 인터페이스 활용 학습 시 주의할 점은 무엇인가요?

에러 인터페이스를 너무 많이 만들면 복잡해집니다. Retryable , Timeout 등 핵심적인 것만 정의하세요.