null을 반환하면 왜 안되는가?
- null을 사용하게 된다면 null을 사용하는 곳에서는 모두 null 체크를 해주어야 하는데 어디선가 null 체크를 안하게 된다면 NullPointerException이 일어나기 때문에 실행중에 장애가 발생하게 된다.
public class Order { private Long id; private Date date; private Member member; // getters & setters } public class Member { private Long id; private String name; private Address address; // getters & setters } public class Address { private String street; private String city; private String zipcode; // getters & setters } // 주문에서 회원의 도시를 알아내고 싶다면 // null이 발생할 확률이 높아지며 체크하는데 // if / else 분기문이 추가되어 소스코드가 더러워지게 된다. order.getMember().getAddress().getcity();
NullPointerException은 무엇이고 왜 발생하면 안되는가?
- null 아무것도 가리키지 않는다 라는 의미를 가지고 있는데 이 null을 참조하는 래퍼런스로 인스턴스 메서드를 사용한다면 NPE가 발생하게 된다.
- 발생하면 안되는 이유는 런타임에 발생되기 때문에 컴파일 시점에 확인할 수 없기 때문에 더 조심해야 하는 것 같다.
Optional을 왜 사용하는가?
- NPE를 방지하기 위한 null 체크와 직접 다루지 않아도 된다는 장점이 있어서 사용하는 것 같다.
- null이 발생할 수 있는 부분에 옵셔널을 사용하지 않았다면 관련된 개발자들은 모두 null을 체크해야 한다거나 null 체크를 해야한다는 문서화가 필요할 것 같은데 옵셔널을 사용하는 것 만으로도 설명이 되는 것 같아 사용하는 것 같다.
Optional은 존재할 수 도 있지만 안 할 수도 있는 객체를 감싸주는 역할을 하기 때문에 isEmpty 네이밍이 크게 불편하게 느껴지진 않았던 것 같다.