2025-10-11

1일 1아티클

LY

value 예외 검사

확인 여부를 확인했나요?


  /**
  * Shows a progress bar blocking other UI interaction with a given progress
  * ratio in \[0, 1\].
  * 진행률 표시줄을 0~1 사이로 표시하는 함수
  */
  fun showProgressBar(progress: Float)

  fun caller() {
      ... // snip
      // 상한으로 설정하는 함수
      val cappedProgress = progress.coerceAtMost(1F)
      showProgressBar(cappedProgress)
  }

  fun showProgressBar(progress: Float) {
      // 하한으로 설정하는 함수
      val progressInRange = progress.coerceAtLeast(0F)
      ... // snip
  }

  1. 값이 진짜 [0, 1] 범위인지 확인하는 부분 불명확
    • 상한값은 호출자가 지정, 하한값은 호출 대상이 지정 중
    • 함수의 오사용 가능성, 수정 사항 발생 시 버그 발생 가능성

개선 방안

  1. 호출되는 함수 내부에서 확인
    • 확인 여부를 타입 검사로 보장 불가능한 경우 유용
    • ex. 범위를 벗어난 값이 입력되면 특정 값(0, 1, etc.)로 처리
    • ex. 제대로 처리되었는지를 알 수 있도록 boolean 형태로 반환
    • ex. 호출자에게 반환값 처리 강제 (Java Error Prone 라이브러리의 @CheckReturnValue)
    • ex. 확인된 예외 사용
  2. 타입을 통한 범위 보장
    • 값이 특정 범위에 속함을 보장하는 타입을 생성하여, 함수에 올바른 값만 전달되도록 강제
    • ex. 검사 완료를 나타내는 class 생성하고 클래스 변수에 값 설정, 함수는 해당 class를 활용
    • ex. 호출자에게 오류 처리 인가 시, 팩토리 함수를 활용 또는 실패 가능한 초기화(failable initalizer) 제작
    • 타입 검사로 보장할 수 있는 값(안전한 null, Optional, etc.) 활용

암묵적으로 확인됐음을 전제로 하는 코드는 지양할 것!

오늘 배운 것

내일 할 일

참고자료

results matching ""

    No results matching ""