null 대신 Optional 클래스
- 토니 호어 (Tony Hoare) : ALGOL W을 설계한면서 처음 null 참조가 등장했다.
구현하기가 쉬웠기 때문에 등장했다고 회상한다.
→ 당시 null 및 예외를 만든 결정을 ‘십억 달러짜리 실수’라 회상한다.
- 하나하나 null 처리를 해 주어야 한다.
- if 문으로 null 처리 → depth 깊어진다. → 가독성 떨어지고 구조가 엉망이 된다.
null 때문에 발생하는 문제
- 에러의 근원 : NPE
- 코드를 어지럽힌다.
- 아무 의미가 없다 : NULL은 아무 의미가 없다
- 자바 철학에 위배된다 : 개발자로 부터 자바는 모든 포인터를 숨겼다. 하지만 예외가 있는것이 바로 NULL 포인터이다.
- 형식 시스템에 구멍을 만든다 : NULL 할당하기 시작하면서 퍼지면 어떤 의미로 사용했는지 알 수 없다.
그래서 등장한 것이 Optional 클래스
- 하스캘과 스칼라의 영향을 받아
Optional<T>
라는 새로운 클래스를 제공한다.
- Optional : 선택형 값을 캡슐화 하는 클래스이다.
- 값이 없으면 Optional.empty 메서드로 Optional을 반환한다. (싱글턴 인스턴스 반환 정적 팩토리 메서드)
- sementic 하게 더 명확해짐.
- 있을수도 없을 수도 있다는 말임.
- Optional이 아니다 → 반드시 가져야 한다.
- unwrap 해서 값이 없을 수 있는 상황에 적절하게 대응하도록 강제하는 효과가 있다,
Optinal 적용 패턴
Optional 이용해서 Optional 객체 만들기