대부분의 메서드와 생성자는 인자로 사용할 수 있는 값을 제한한다. 이런 제한들은 반드시 문서로 남겨야 할 뿐 아니라 메서드 시작 부분에서 검사해야 한다. 오류는 가급적 빨리 탐지해야 한다는 일반 원칙의 특수한 경우이다.


 이런 오류를 생략한다면 어떻게 될까? 

  • 첫 째, 처리 도중에 이상한 예외를 내면서 죽어버리는 경우. 
  • 둘 째, 실행이 제대로 되는 것 같은데 잘못된 결과가 나오는 것. 
  • 셋 째, 정상적으로 반환값을 내기는 하지만 어떤 객체의 상태가 비정상적으로 바뀌는 경우. 

위와 같은 골치아픈 상황을 보게 될 것이다. 그러나 메서드가 실제 계산을 수행하기 전에 그 인자를 반드시 검사해야 한다는 원칙에도 예외는 있다. 그 중 가장 중요한 것은 유효성 검사를 실행하는 오버헤드가 너무 크거나 비현실적이고, 계산 과정에서 유효성 검사가 자연스럽게 이루어지는 경우이다.  


 때로는 계산 과정에서 암묵적으로 유효성 검사가 이루어지기는 하는데, 검사가 실패했을 때 엉뚱한 예외가 던져지는 경우가 있다. 계산 도중에 인자 값이 잘 못되어 발생하는 예외가 메서드 문서에 명시된 예외가 다를 수 있다는 것인데, 이런 경우는 예외 변환을 통해 메서드 문서에 명시된 예외로 변환해야 한다.


 이번 절의 내용을 잘 못 받아 들여 "인자에 제약을 두는 것은 바람직하다" 라고 믿어 버리면 위험하다. 메서드는 가능하다면 일반적으로 적용할 수 있도록 설계해야 한다.  인자로 받는 모든 값에 대한 처리가 잘 되어있다면, 인자에 대한 제약은 적을수록 좋다.

요약

메서드나 생성자를 구현할 때는 받을 수 있는 인자에 제한이 있는지 따져봐야 한다. 제한이 있다면 그 사실을 문서에 남기고 메서드 앞부분에서 검사하도록 해야한다. 


+ Recent posts