개발자 99% 커뮤니티에서 수다 떨어요!
연습문제 21: 새로운 컨테이너 클래스를 설계하는 동안, 다음과 같은 에러 조건이 가능하다는 것을 발견한다.
add 루틴에서 새로운 원소를 위한 메모리가 부족하다.
fetch 루틴에서 요청된 엔트리를 찾을 수 없다.
add 루틴에서 null 포인터가 전달되었다.
이것들은 각각 어떻게 처리되어야 하는가? 에러가 생성되어야 하나, 혹은 예외가 발생되어야 하나, 아니면 그 조건을 무시하는게 좋은가?
예외로 처리한다. 메모리가 부족한 경우는 자주 일어나지 않을 것 같고 예측한 처리과정을 벗어난 문제라고 생각되어서 예외로 처리되는게 맞을 것 같다. add를 호출했는데 메모리가 부족한 경우는 정말 예외적이라고 생각된다.
에러로 처리한다. 어떤 위치에 있는 데이터를 요청할 때에 그 위치에 원하는게 없는건 충분히 예상이 가능한 문제인 것 같다.
예외로 처리한다. add 루틴 내에서 대상 데이터가 null인지 체크해서 에러를 낼 필요는 없을것 같다. null을 add할리는 없으니 예외적인 상황이라고 생각했다.
메모리가 부족한 것은 예외적인 상황이므로 예외를 발생시켜야 한다고 생각한다.
어떤 항목을 찾는 일을 실패하는 상황은 상당히 자주 일어난다. 우리 컬렉션 클래스를 호출하는 애플리케이션에서 중복 항목을 만들지 않기 위해 어떤 항목이 클래스에 있는지 미리 검사해 보는 경우도 있다. 우리 생각에 (2)의 경우 그냥 에러를 반환해야 할 것이다.
null이 애플리케이션에서 어떤 의미가 있다면 컨테이너에 들어갈 수 있게 하는 것이 이치에 맞을 것이다. 하지만 null 값을 저장하는 것이 아무 의미가 없다면, 아마도 예외를 던지는 것이 맞을 것이다.