대부분의 메서드와 생성자는 인자로 사용할 수 있는 값을 제한한다. 이런 제한들은 반드시 문서로 남겨야 할 뿐 아니라 메서드 시작 부분에서 검사해야 한다. 오류는 가급적 빨리 탐지해야 한다는 일반 원칙의 특수한 경우이다.
이런 오류를 생략한다면 어떻게 될까?
- 첫 째, 처리 도중에 이상한 예외를 내면서 죽어버리는 경우.
- 둘 째, 실행이 제대로 되는 것 같은데 잘못된 결과가 나오는 것.
- 셋 째, 정상적으로 반환값을 내기는 하지만 어떤 객체의 상태가 비정상적으로 바뀌는 경우.
위와 같은 골치아픈 상황을 보게 될 것이다. 그러나 메서드가 실제 계산을 수행하기 전에 그 인자를 반드시 검사해야 한다는 원칙에도 예외는 있다. 그 중 가장 중요한 것은 유효성 검사를 실행하는 오버헤드가 너무 크거나 비현실적이고, 계산 과정에서 유효성 검사가 자연스럽게 이루어지는 경우이다.
때로는 계산 과정에서 암묵적으로 유효성 검사가 이루어지기는 하는데, 검사가 실패했을 때 엉뚱한 예외가 던져지는 경우가 있다. 계산 도중에 인자 값이 잘 못되어 발생하는 예외가 메서드 문서에 명시된 예외가 다를 수 있다는 것인데, 이런 경우는 예외 변환을 통해 메서드 문서에 명시된 예외로 변환해야 한다.
이번 절의 내용을 잘 못 받아 들여 "인자에 제약을 두는 것은 바람직하다" 라고 믿어 버리면 위험하다. 메서드는 가능하다면 일반적으로 적용할 수 있도록 설계해야 한다. 인자로 받는 모든 값에 대한 처리가 잘 되어있다면, 인자에 대한 제약은 적을수록 좋다.
요약
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[메서드]규칙40. 메서드 시그너처는 신중하게 설계하라 (0) | 2017.05.04 |
---|---|
[메서드]규칙39. 필요하다면 방어적 복사본을 만들라 (0) | 2017.05.04 |
[열거형과 어노테이션]규칙37. 자료형을 정의할 때 표식 인터페이스를 사용하라 (0) | 2017.05.04 |
[열거형과 어노테이션]규칙36. Override 어노테이션은 일관되게 사용하라 (0) | 2017.05.04 |
[열거형과 어노테이션]작명 패턴 대신 어노테이션을 사용하라 (0) | 2017.05.04 |