자바로 프로그램을 개발하면서 한 번이라도 NullPointerException을 겪은 사람? 다양한 예외 중에서 가장 자주 겪는 예외가 NullPointerException인 사람? 아마 대다수가 손을 내리지 못할 것이다.. Null 이라는 표현을 사용하면서 치러야 할 당연한 대가가 아닐까?
→ 이번 장에서는 거시적인 프로그래밍 관점으로 null 문제를 조금 다르게 접근해보려 한다.
아래처럼 자동차와 자동차 보험을 갖고 있는 사람 객체를 중첩 구조로 구현했다고 가정
public class Person {
private Car car;
public Car getCar() { return car; }
}
public class Car {
private Insurance insurance;
public Insurance getInsurance() { return insurance; }
}
s
public class Insurance {
private String name;
public String getName() { return name; }
}
아래와 같은 메소드를 호출하면 어떤 일이 일어날까?
public String getCarInsuranceName(Person person) {
return person.getCar().getInsurance().getName();
}
대부분의 프로그래머는 다양한 곳에 null 확인 코드를 추가해 NPE를 줄여보려 할 것이다.
null 피하기 시도 1 : 깊은 의심
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 피하기 시도 2 : 너무 많은 출구
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();
}