코드 품질 개선 - 66회: 단호하지만 아직 불안한
·2026.02.13 11:00
유효성 검사는 사용 시점보다 객체 생성·갱신 시점에 끝내야 한다.
Rational 클래스는 Int 분자와 UInt 분모로 분수를 표현하고, toIrreducible()에서 Euclid 알고리즘으로 최대공약수를 구해 기약분수로 바꾼다. 다만 분모가 0U인지 매번 메서드 안에서 확인하면, plus, minus 같은 기능이 늘어날수록 검증 코드가 여기저기 흩어진다.
그래서 핵심은 잘못된 상태를 객체 생성 시점에 차단하는 것이다. 분모가 0이면 인스턴스를 만들지 않는 팩토리 함수 of()를 두고 null을 반환하면, 이후의 모든 객체는 기본적으로 유효한 상태라는 전제를 가질 수 있다.
반대로 생성자 init 안에서 require(denominator != 0U)로 막는 방식은, 호출하는 모든 곳에서 직접 체크를 잊지 않아야 한다는 부담이 남는다. 이런 방식은 코드가 컴파일되어도 검증 누락을 막아주지 못하므로, nullable type이나 Optional / Option / Maybe처럼 실패를 타입으로 드러내는 방법이 더 안전하다.
정리하면, 값 검증은 객체 생성 또는 상태 변경 시점에 수행해야 하고, 가능하다면 실패를 반환값이나 타입으로 강제해 호출자가 반드시 처리하게 만들어야 한다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.