<aside> 📖 이 장의 내용
</aside>
public String getCarInsuranceName(Person person) {
return person.getCar().getInsurance().getName();
}
위 코드에서 person이 null이거나 getCar(), getInsurance()가 null을 반환한다면 어떻게 될까?
NullPointerException 줄이기public String getCarInsuranceName(Person person) {
if(person != null) {
Car car = person.getCar();
if(car != null) {
Insurance insurance = car.getInsurance();
if(insurance != null) {
return insurance.getName();
}
}
}
return "Unknown";
}
위 코드는 변수를 참조할때마다 null을 확인한다.
따라서 중첩된 if가 추가되면서 코드 들여쓰기 수준이 증가한다. (메모리, 시간복잡도 낭비중임)
이와같은 반복 패턴 코드를 '깊은 의심(deep doubt)'라 부른다. 이를 반복하다보면 코드의 구조가 엉망이 되고 가독성도 떨어진다.
public String getCarInsuranceName (Person person){
if (person == null) {
return "Unknown";
}
Car car = person.getCar();
if (car == null) {
return "Unknown";
}
Insurance insurance = car.getInsurance();
if (insurance == null) {
return "Unknown";
}
return insurance.getName();
}
위 코드처럼 중첩 if 블록을 없앨 수 있지만, 너무 많은 출구(return)이 생겼기 때문에 유지보수가 어려워지고 실수가 발생하기 쉽다.
null 때문에 발생하는 문제들NullPointerException은 자바에서 가장 흔한 에러null 확인 코드로 가독성이 저하null은 아무 의미도 표현하지 않음null은 예외null은 무형식이며 정보를 포함하고있지 않으므로 모든 참조 형식에 null을 할당할 수 있다. 이렇게 할당된 null이 전파되면 애초에 null이 어떤 의미로 사용되었는지 알수 없다.