<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
이 어떤 의미로 사용되었는지 알수 없다.