-
7장 - 결과 부족이 발생할 경우 null과 Failure를 사용하라Kotlin/Effective Kotlin 요약 2023. 1. 22. 00:01728x90
개요
함수가 원하는 결과를 만들어낼 수 없는 경우가 발생할 수 있습니다.
다음과 같은 상황이 예시로 존재합니다.
- 서버로부터 데이터를 읽어 들이려 했지만 인터넷 연결 문제가 발생한 경우
- 조건에 맞는 첫 번째 요소를 찾으려 했지만 찾을 수 없는 경우
- 텍스트를 파싱해서 객체를 만드려고 했지만 텍스트의 형식이 맞지 않는 경우
이런 상황을 어떻게 처리하면 좋을까요?
다양한 처리 방법들
- 예외를 throw 한다
- null 또는 실패를 나타내는 sealed 클래스를 리턴한다(대게 이름을 Failure 사용)
이때 예외는 정보를 전달되는 방식으로 사용되서는 안 됩니다.
예외적인 상황이 발생했을 때 사용하는 것이 좋습니다.
예를 들어 JPA를 사용하여 findByID로 특정 ID값을 가진 하나의 객체를 조회하려고 합니다.
이때 특정 ID를 가진 객체가 존재하지 않는다면 throw를 바로 하지 않고 null을 반환합니다.
이후에 해당 id를 사용하려고 할 때 null을 가지고 있다면 throw 하는 방식으로 사용합니다.
throw가 권장되지 않는 다양한 이유들
- 예외를 추적하기 어렵다.
- 예외는 놓칠 수 있으며, 전체 애플리케이션을 중지시킬 수 있습니다.
- null 값과 sealed result 클래스는 명시적으로 처리해야 하며, 애플리케이션의 흐름을 중지하지 않습니다.
null과 sealed result의 차이점
대부분 null을 반환하는 것이 일방적이며 실패에 대한 추가적인 정보를 나타내고 싶다면 sealed result를 사용합니다.
PS
추가적으로 개발자에게 null이 발생할 수 있다면 경고를 주기 위해서는 getOrNull 등을 사용하여 무엇이 리턴되는지 예측할 수 있게 하는 것이 좋습니다.
참고자료
https://codechacha.com/ko/kotlin-sealed-classes/
728x90'Kotlin > Effective Kotlin 요약' 카테고리의 다른 글
9장 - use를 사용하여 리소스를 닫아라 (0) 2023.01.25 8장 - 적절하게 null을 처리하라 (0) 2023.01.24 6장 - 사용자 정의 오류보다는 표준 오류를 사용하라 (0) 2023.01.21 아이템5 - 예외를 활용해 코드에 제한을 걸어라 (0) 2023.01.04 아이템4 - inferred 타입으로 리턴하지 말라 (0) 2023.01.03