본문은 Effective Java를 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다.
선결론
- 값을 반환하지 못할 가능성이 있거나 호출할 때마다 반환값이 없을 가능성을 염두해둬야 하는 메서드라면 옵셔널을 고려하라
- 옵셔널 반환에는 성능 저하가 뒤따르니, 성능에 민감한 메서드라면 nulld을 반환하거나 예외를 던지는 편이 낫다
옵셔널
- 옵셔널은 원소를 최대 1개 가질 수 있는 불변 컬렉션이다(실제로 Optional<T>가 Collection<T>를 구현한 것은 아니다!)
- 옵셔널을 반환하는 메서드는 예외를 던지는 메서드보다 유연하고 사용하기 쉬우며, null을 반환하는 메서드보다 오류 가능성이 적다
옵셔널 사용 시 주의점
- 옵셔널을 반환하는 메서드에서는 절대 null을 반환하면 안된다
- 옵셔널의 취지는 반환값이 없을 수도 있음을 API 사용자에게 명확히 알려주는 것이다
- 옵셔널을 컬렉션의 키, 값, 원소나 배열의 원소로 사용하는 일은 거의 없다
- 즉, 반환값 이외의 용도론 거의 쓰이지 않는다
- 컬렉션, 스트림, 배열, 옵셔널 같은 컨테이너 타입은 옵셔널로 감싸면 안 된다
- 결과가 없을 수 있으며, 클라이언트가 이 상황을 특별하게 처리해야 하는 경우엔 Optional<T>를 반환한다
- 성능이 중요한 상황에서는 옵셔널이 적절하지 않을 수 있다
- 옵셔널 자체도 값이 한 번 감싸진 객체이다(할당 및 초기화, 메서드 호출 필요)
- 박싱된 기본 타입을 담은 옵셔널을 반환하는 것은 값을 두 겹 감싸는 행위로서 지양해야 한다
'책 > Effective Java' 카테고리의 다른 글
[이펙티브 자바] 아이템 58: 전통적인 for문보다는 for-each문을 사용하라 (0) | 2022.06.30 |
---|---|
[이펙티브 자바] 아이템 57: 지역변수의 범위를 최소화하라 (0) | 2022.06.29 |
[이펙티브 자바] 아이템 54: null이 아닌 빈 컬렉션이나 배열을 반환하라 (0) | 2022.06.23 |
[이펙티브 자바] 아이템 53: 가변인수는 신중히 사용하라 (0) | 2022.06.23 |
[이펙티브 자바] 아이템 51: 메서드 시그니처를 신중히 설계하라 (0) | 2022.06.22 |