Back to writing

코틀린 아카데미-이펙티브 코틀린

코틀린 아카데미-이펙티브 코틀린

인수와 상태에 대한 기대치를 명시하라

코틀린에서는 주로 다음과 같은 방법을 사용하여 기대치를 명시합니다.

  • require 블록: 함수의 인수가 특정 조건을 만족해야 할 때 사용합니다. 조건이 만족되지 않으면 IllegalArgumentException이 발생합니다.
  • check 블록: 함수의 내부 상태가 특정 조건을 만족해야 할 때 사용합니다. 조건이 만족되지 않으면 IllegalStateException이 발생합니다.
  • assert 블록: 디버그 모드에서만 활성화되는 조건 검사를 위해 사용합니다. 조건이 만족되지 않으면 AssertionError가 발생합니다.
  • error 함수: 애플리케이션이 예기치 못한 상태에 도달했을 때 사용합니다
  • return 또는 throw 와 함께 사용하는 엘비스 연산자

인수

인수가 있는 함수를 정의할 때 기대치가 종종 타입 시스템으로는 표현할 수 없는 기대치일 때가 있습니다.

  • 숫자의 팩토리얼을 계산할 때, 숫자가 양의 정수여야 함
  • 클러스터를 찾을 때 점들의 리스트가 비어 있지 않아야 함
  • 이메일을 보낼 때 이메일 주소가 유효한 형식이어야 함

상태

함수가 특정 상황에만 사용되게 해야할 경우가 종종 있습니다.

  • 객체가 먼저 초기화되어야 함
  • 사용자가 로그인한 상태여야 함
  • 객체가 열려 있어야 함

사용자 정의 오류보다 표준 오류를 선호하라

  • 표준 라이브러리 예외는 잘 알려져 있으므로 이를 재사용하는 것이 좋습니다.
  • 잘 알려져 있으며 명세가 정립된 요소를 재사용하면 API를 쉽게 이해하고 배울 수 있습니다.

결과가 없을 가능성이 있는 경우 널 가능 또는 Result 반환 타입을 선호하라

때때로 함수가 원하는 결과를 생성하지 못할 때가 있습니다.

  • 서버로부터 데이터를 가져오려고 했지만, 인터넷 연결에 문제가 있는 경우
  • 특정 조건에 맞는 첫 번째 요소를 가져오려고 시도했지만, 대상 리스트에 조건에 맞는 요소가 없는 경우
  • 텍스트로부터 객체를 파싱하려고 할 때 텍스트의 형식이 잘못된 경우

이러한 상황을 처리하는 두 가지 주요 메커니즘이 있습니다.

  • null 또는 Result.failure를 반환합니다.
  • 예외를 던집니다.

이 둘 사이에는 중요한 차이가 있습니다.

  • 정보를 전달하는 표준 방식으롤 예외를 사용해서는 안 됩니다.
  • 예외는 비정상적이고 특수한 상황을 의미하며, 이러한 상황을 처리하기 위해 사용해야 합니다.
  • 예외가 전파되는 과정은 직관적이지 않으므로 코드에서 놓치기 쉽습니다.
  • 코틀린에서 예외는 unchecked exception 입니다. 사용자들에게 예외를 처리하도록 강요하거나 권장하지 않습니다.
  • 오류가 예상되는 경우에는 null 또는 Result를 반환하고 오류가 예상되지 않는 상황에서는 예외를 던지는 것이 좋습니다.
  • 예외를 던지는 함수를 Result 를 반환하는 함수로 변환하려면 runCatching 블록을 사용할 수 있습니다.
  • 예외는 정상적인 실행 흐름의 일부가 되어서는 안됩니다.
  • 실패할 수 있는 작업을 수행할 때 실패를 처리하는 것 또한 프로그램의 정상적인 실행 흐름이므로, 실패를 안전하게 처리하여 프로그램의 안정성을 높여야 합니다.