오류 처리

Kotlin은 확인된 예외를 지원하지 않습니다. 이렇게 하면 복구 가능한 예외만 처리하도록 선택할 수 있으므로 오류 처리가 간소화되고 능률화됩니다. 또한 발생 가능한 모든 예외를 명시적으로 처리할 필요가 없으므로 코드가 더 깔끔해지고 기본 목적에 더 집중할 수 있습니다.

복구 가능한 실패는 개발자가 직접 해결할 수 있는 문제입니다. 예를 들어 호출에 사용된 ID가 유효하지 않으면 API는 invalid data 메시지와 함께 HomeException를 발생시킵니다. 그러면 앱 개발자는 캐시에서 해당 ID를 삭제하거나 사용자에게 '구조체를 찾을 수 없음'과 같은 메시지를 표시할 수 있습니다.

복구 가능한 실패를 처리하는 방법의 예시:

val result =
   try {
     homeManager.requestPermissions()
   } catch (e: HomeException) {
     PermissionsResult(
       PermissionsResultStatus.ERROR,
       "Got HomeException with error: ${e.message}",
     )
   }

Home API의 모든 메서드는 HomeException를 발생시킬 수 있으므로 모든 호출에서 try-catch 블록을 사용하여 HomeException를 포착하는 것이 좋습니다.

HomeException를 처리할 때는 codemessage 필드를 확인하여 문제가 무엇인지 알아보세요.

처리되지 않은 예외가 있으면 앱이 비정상 종료됩니다.

다음 표에는 발생할 수 있는 HomeException 코드의 의미가 나와 있습니다.

표: HomeException codes
코드 의미
ABORTED 작업이 중단되었습니다. 이는 일반적으로 시퀀스 확인 실패나 트랜잭션 취소와 같은 동시 실행 문제가 있을 때 표시됩니다.
ALREADY_EXISTS 만들려는 리소스 또는 항목이 이미 존재합니다. 예를 들어 온도 조절기의 이름이 지정된 일정이 될 수 있습니다.
API_NOT_CONNECTED 클라이언트가 연결에 실패한 API의 메서드를 호출하려고 시도했습니다. 이는 기기가 오프라인 상태이거나 호출하려는 API를 지원하지 않는 경우 발생할 수 있습니다.
CANCELLED 작업이 취소되었습니다. 대개 호출자에 의해 취소됩니다.
DATA_LOSS 복구할 수 없는 데이터 손실이나 손상이 발생했습니다.
DEADLINE_EXCEEDED 작업을 완료하기 전에 기한이 지났습니다. 작업에서 시스템의 상태를 변경하는 경우 작업이 정상적으로 완료되었어도 이 오류가 반환될 수 있습니다.
FAILED_PRECONDITION 시스템이 작업 실행에 필요한 상태가 아니기 때문에 작업이 거부되었습니다. 예를 들어 이미 멈춘 오븐에서 stop를 호출하면 이 메시지가 표시될 수 있습니다.
INTERNAL 내부 오류가 발생했습니다. 이는 기본 시스템에서 예상하는 불변 항목에 문제가 있는 경우입니다. 이 오류 코드는 심각한 오류에만 예약되어 있습니다.
INVALID_ARGUMENT 예상 값 범위를 벗어난 인수를 제공했습니다.
NOT_FOUND 찾을 수 없는 항목 또는 리소스를 지정했습니다. 예를 들어 미디어 플레이어 기기에서 activateAudioTrack를 호출할 때 존재하지 않는 트랙 ID를 지정합니다.
OUT_OF_RANGE 현재 시스템 상태에 따라 매개변수가 유효 범위를 초과했습니다. 이 메시지는 값이 API 호출이 허용할 수 있는 값 범위 내에 있지만 현재 컨텍스트에서 적절하지 않은 경우에 표시됩니다.
PERMISSION_DENIED 지정된 작업을 실행할 권한이 없습니다. 이 오류 코드는 요청이 다른 면에서 유효하다는 의미로 해석해서는 안 됩니다.
RESOURCE_EXHAUSTED 일부 리소스가 소진되었습니다. 예를 들어 반려동물 급식기 기기에서 dispense를 호출했는데 기기에 더 이상 사료가 남아 있지 않은 경우 이 예외가 발생할 수 있습니다.
SDK_INITIALIZATION_MISSING_INFO SDK가 완전히 초기화되지 않았습니다. 예를 들어 등록되지 않은 트레잇의 TraitFactory를 가져오려고 하면 이 메시지가 표시됩니다. 초기화를 참고하세요.
UNAUTHENTICATED 호출자를 식별할 수 없거나 요청에 유효한 사용자 인증 정보가 없습니다.
UNAVAILABLE 서비스를 사용할 수 없습니다. 일시적인 상태일 가능성이 높으며, 잠시 시간을 두고 다시 시도하면 해결될 수 있습니다. 멱등성이 없는 작업을 재시도하는 것이 항상 안전한 것은 아닙니다.
UNIMPLEMENTED 요청한 작업이 이 서비스에서 구현, 지원 또는 사용 설정되지 않았습니다.
UNKNOWN 알 수 없는 오류입니다. 일반적으로 UNKNOWN는 다른 오류 코드를 사용하여 분류할 수 없는 오류 상태가 발생할 때 표시됩니다. 예를 들어 외부 API에서 수신된 상태 값에 근본 원인에 관한 정보가 충분하지 않은 경우 이 오류가 반환될 수 있습니다.