Guava/Optional

위클립스
이동: 둘러보기, 찾기

null에 대한 주의 부족은 수많은 버그들을 낳는다. 구글 코드 베이스의 연구에 따르면, 95% 의 컬렉션 라이브러리들은 값으로 null을 취급하는 것을 고려하지 않고 있다. 또한 이 연구에서는 null 값을 아무런 에러메시지 없이 그냥 받아들이기 보다는, 에러를 일으키는 편이 개발자에게 도움이 된다고 분석한다.

null값의 활용은 메모리나 성능 측면에서 유리한 점이 있기는 하지만, 상당히 불쾌한 애매모호성 문제를 야기한다. null 값이 무엇을 의미하는지 명쾌하게 정의된 경우는 매우 드물다. -- 예를 들어 Map.get(key)의 결과 값이 null을 리턴한 경우, 값이 널인 것인지 키를 포함하지 않은 것인지 알 수 없다. 대게의 경우 null은 실패를 의미할 수도 있고, 성공을 의미할 수도 있다.

이러한 문제의 근본적인 원인은 null이 정상적인 한 값인지, 값의 부재를 의미하는지 명확하지 않기 때문이다.

null 대신 다른 뭔가를 쓴다면, 의미를 더 명확하게 할 수 있다.

[편집] Optional

값의 부재를 의미하기 위해 null을 사용하는 대부분의 경우, 값이 존재하지 않는 것인지, 값을 찾지 못한 것인지 애매해진다. 예를 들어 Map.get(key)는 키를 찾지 못한 경우 null을 리턴한다.

Optional<T>null 일수 있는 레퍼런스를 대치한다. Optional<T> 인스턴스는 null이 아닌 실제 객체를 갖고(contain) 있거나(present) 아무런 실제 객체를 갖고 있지 않을 수도 있다.(absent)

이러한 컨셉에서, null을 갖고 있다라고는 언급하지 않는다. 객체를 갖고 있거나(present) 갖고 있지 않음(absent)으로만 언급한다.

Map <String, Optional<String>> map = ...;
 
// 키는 있지만 값이 없음을 명시적으로 지정.
map.put("test", Optional.absent());
map.put("test2", Optional.of("테스트 값"));

[편집] 링크

개인 도구
이름공간
변수
행위
포탈
탐색
도움
도구모음