Back to writing
코틀린 아카데미-이펙티브 코틀린
인수와 상태에 대한 기대치를 명시하라
코틀린에서는 주로 다음과 같은 방법을 사용하여 기대치를 명시합니다.
require블록: 함수의 인수가 특정 조건을 만족해야 할 때 사용합니다. 조건이 만족되지 않으면IllegalArgumentException이 발생합니다.check블록: 함수의 내부 상태가 특정 조건을 만족해야 할 때 사용합니다. 조건이 만족되지 않으면IllegalStateException이 발생합니다.assert블록: 디버그 모드에서만 활성화되는 조건 검사를 위해 사용합니다. 조건이 만족되지 않으면AssertionError가 발생합니다.error함수: 애플리케이션이 예기치 못한 상태에 도달했을 때 사용합니다return또는throw와 함께 사용하는 엘비스 연산자
인수
인수가 있는 함수를 정의할 때 기대치가 종종 타입 시스템으로는 표현할 수 없는 기대치일 때가 있습니다.
- 숫자의 팩토리얼을 계산할 때, 숫자가 양의 정수여야 함
- 클러스터를 찾을 때 점들의 리스트가 비어 있지 않아야 함
- 이메일을 보낼 때 이메일 주소가 유효한 형식이어야 함
상태
함수가 특정 상황에만 사용되게 해야할 경우가 종종 있습니다.
- 객체가 먼저 초기화되어야 함
- 사용자가 로그인한 상태여야 함
- 객체가 열려 있어야 함
사용자 정의 오류보다 표준 오류를 선호하라
- 표준 라이브러리 예외는 잘 알려져 있으므로 이를 재사용하는 것이 좋습니다.
- 잘 알려져 있으며 명세가 정립된 요소를 재사용하면 API를 쉽게 이해하고 배울 수 있습니다.
결과가 없을 가능성이 있는 경우 널 가능 또는 Result 반환 타입을 선호하라
때때로 함수가 원하는 결과를 생성하지 못할 때가 있습니다.
- 서버로부터 데이터를 가져오려고 했지만, 인터넷 연결에 문제가 있는 경우
- 특정 조건에 맞는 첫 번째 요소를 가져오려고 시도했지만, 대상 리스트에 조건에 맞는 요소가 없는 경우
- 텍스트로부터 객체를 파싱하려고 할 때 텍스트의 형식이 잘못된 경우
이러한 상황을 처리하는 두 가지 주요 메커니즘이 있습니다.
null또는Result.failure를 반환합니다.- 예외를 던집니다.
이 둘 사이에는 중요한 차이가 있습니다.
- 정보를 전달하는 표준 방식으롤 예외를 사용해서는 안 됩니다.
- 예외는 비정상적이고 특수한 상황을 의미하며, 이러한 상황을 처리하기 위해 사용해야 합니다.
- 예외가 전파되는 과정은 직관적이지 않으므로 코드에서 놓치기 쉽습니다.
- 코틀린에서 예외는
unchecked exception입니다. 사용자들에게 예외를 처리하도록 강요하거나 권장하지 않습니다. - 오류가 예상되는 경우에는
null또는Result를 반환하고 오류가 예상되지 않는 상황에서는 예외를 던지는 것이 좋습니다. - 예외를 던지는 함수를
Result를 반환하는 함수로 변환하려면runCatching블록을 사용할 수 있습니다. - 예외는 정상적인 실행 흐름의 일부가 되어서는 안됩니다.
- 실패할 수 있는 작업을 수행할 때 실패를 처리하는 것 또한 프로그램의 정상적인 실행 흐름이므로, 실패를 안전하게 처리하여 프로그램의 안정성을 높여야 합니다.