(Effective Kotlin) Item No.5 예외를 사용하여 코드 제한

코드가 특정 방식으로 작동해야 하는 경우 예외를 사용하여 제한하는 것이 가장 좋습니다.


Kotlin에서는 다음과 같은 방법을 사용하여 코드 실행을 제한할 수 있습니다.



require : 매개변수를 제한할 수 있습니다.


check : 상태 관련 작업을 제한할 수 있습니다.


주장: 무언가가 사실인지 확인할 수 있습니다.


어설션 블록은 테스트 모드에서만 작동합니다!
!

return 또는 throw와 함께 사용되는 Elvis 연산자

간단한 예를 들어봅시다!


이렇게 제한하면 많은 이점이 있습니다!


문서를 읽지 않은 개발자가 문제를 볼 수 있도록 제한
함수는 예기치 않게 동작하지 않으며 문제가 발생하면 예외를 발생시킵니다.


예상치 못한 동작을 수행하는 것은 예외를 던지는 것보다 더 위험하며 상태를 관리하는 것은 매우 어려울 수 있습니다.


이 제한은 누락된 문제가 없고 코드가 더 안정적으로 작동하도록 합니다.

코드는 다소 자체 테스트입니다.


따라서 스마트 캐스트 기능을 사용할 수 있기 때문에 이와 관련된 단위 테스트를 줄일 수 있고 캐스트(유형 변환)를 줄일 수 있습니다.


이러한 제한 사항과 관련된 자세한 내용을 참조하세요. 가장 일반적인 매개 변수와 관련된 내용을 먼저 확인하십시오.

함수를 정의할 때 유형 시스템을 사용하여 매개변수를 제한하는 많은 코드를 작성합니다.

  • 인수로 좌표를 받고 클러스터를 찾을 때 비어 있지 않은 좌표 목록이 필요합니다.

  • 사용자의 이메일 주소를 수신하면 값이 입력되었는지, 이메일 형식이 올바른지 확인해야 합니다.

  • 숫자를 인수로 취하고 계승을 계산하는 경우 숫자는 양의 정수여야 합니다.

일반적으로 require()는 이러한 제한을 적용하는 데 사용됩니다.

require()는 제약 조건을 확인하고 만족하지 않으면 예외를 발생시킵니다.


이 형태의 확인 코드는 독자가 확인하기 편리한 기능의 시작 부분에 배치됩니다.

require()는 조건이 충족되지 않으면 무조건 IllegalArgumentException을 발생시키므로 이 제한을 무시할 수 없습니다.

일반적으로 이 처리는 함수의 맨 처음에 이루어지므로 코드를 읽을 때 쉽게 확인할 수 있습니다.

다음과 같이 람다를 사용하여 지연된 메시지를 정의할 수도 있습니다.


따라서 require()를 사용하여 매개변수 관련 제한을 설정할 수 있습니다.


또한 상태는 예외를 사용하여 제한을 적용하는 대표적인 대상입니다.

일부 특정 조건이 충족될 때만 기능을 사용할 수 있도록 해야 하는 경우가 있습니다.

예를 들어:

  • 개체가 미리 초기화된 경우에만 처리하려는 함수
  • 사용자가 로그인한 경우에만 처리하려는 기능입니다.

  • 객체를 쓸 수 있을 때 사용하는 함수

일반적으로 말해서 check()는 상태 관련 제한을 두는 데 사용됩니다!


check()는 require()와 비슷하지만 지정된 예측이 충족되지 않으면 IllegalStateException을 발생시킵니다.

상태가 올바른지 확인하는 데 사용됩니다.

require()와 유사하게 지연된 메시지를 사용하여 예외 메시지를 변경할 수 있습니다.

함수 전체에 추측이 있는 경우 일반적으로 require 블록 뒤에 배치됩니다.

체크() 나중에.

이 검사는 사용자가 계약을 위반하고 있어서는 안 되는 곳에서 함수를 호출하고 있다고 의심될 때 발생합니다.

사용자가 코드를 올바르게 작성한다고 신뢰하는 것보다 문제 상황을 예상하고 예외를 발생시키는 것이 항상 더 좋습니다.

이러한 검사는 사용자뿐만 아니라 이를 구현하는 사람들에게도 유용합니다.

자체 구현을 확인하려면 일반적으로 assert()를 사용합니다.

어설션 패밀리 함수 사용

기능이 올바르게 구현된 경우 이를 허용하는 일부 코드가 있습니다.

함수가 10개의 요소를 반환하면 “함수가 10개의 요소를 반환합니까?”에서 호출한 코드는 참을성 있게 기다립니다.

그러나 기능이 올바르게 구현되지 않을 수 있습니다.

처음부터 구현이 잘못되었거나 나중에 다른 사람이 코드를 변경하여 제대로 작동하지 않을 수 있습니다.

이러한 구현 문제로 인해 발생할 수 있는 다른 문제를 방지하려면 단위 테스트를 사용하는 것이 가장 좋습니다.

Null 허용 및 스마트 변환

  • Kotlin에서는 require 및 check 블록을 사용하여 조건을 확인하고 true이면 해당 조건 이후에 true로 간주하고 이를 사용하여 유형 비교를 수행할 때 스마트 캐스팅이 작동합니다.

  • 또한 Elvis 연산자는 null 허용 여부를 위해 오른쪽에 throw 또는 return과 함께 사용되는 경우가 많습니다.

정리하다

  • Kotlin에서 코드 제한의 이점
    • 한도를 보다 쉽게 ​​확인할 수 있습니다.

    • 애플리케이션을 보다 안정적으로 만들 수 있습니다.

    • 코드를 잘못 작성하는 것을 방지합니다.

    • 스마트 캐스트를 사용할 수 있습니다.

  • Kotlin에서 제공하는 제약 메커니즘
    • require 블록: 매개변수와 관련된 예측을 정의하기 위한 일반적인 방법입니다.

    • Inspection Blocks: 상태 종속 예측을 정의하기 위한 일반적인 도구입니다.

    • 어설션 블록: 테스트 모드에서 테스트할 때 사용되는 일반적인 수단
    • 반환 및 던지기와 함께 Elvis 연산자를 사용하십시오!