<aside> 📖 이 장의 내용

</aside>


11.1 값이 없는 상황을 어떻게 처리할 수 있을까?

public String getCarInsuranceName(Person person) {
	return person.getCar().getInsurance().getName();
}

위 코드에서 personnull이거나 getCar(), getInsurance()null을 반환한다면 어떻게 될까?

11.1.1 보수적인 자세로 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)이 생겼기 때문에 유지보수가 어려워지고 실수가 발생하기 쉽다.


11.1.2 null 때문에 발생하는 문제들


11.1.3 다른 언어는 null 대신 무얼 사용하나?