List<String> names = getNames();
names.sort(); // names가 null이라면 NPE가 발생함
List<String> names = getNames();
// NPE를 방지하기 위해 null 검사를 해야함
if(names != null){
names.sort();
}
public final class Optional<T> {
// If non-null, the value; if null, indicates no value is present
private final T value;
...
}
Optional 객체에 접근하기 위해선 get() 메서드를 사용한다. 하지만 이 방법은 값이 없는 경우에 예외가 발생할 수 있으므로, isPresent() 메서드를 사용하여 값이 존재하는지 여부를 먼저 확인하는 것이 좋다.
또한, Optional 객체에 값이 있을 경우에는 orElse() 나 orElseGet() 메서드를 사용하여 대체 값을 제공할 수 있다.
Optional 객체는 다른 메서드들과 연결하여 사용할 수 있다.
import java.util.Optional;
public class OptionalExample {
public static void main(String[] args) {
String str = "Hello, World!"; // null이 아닌 값을 가지는 문자열 변수
Optional<String> optionalStr = Optional.of(str); // Optional 객체 생성, 값이 null이 아니므로 of() 메서드 사용
System.out.println(optionalStr); // 출력: Optional[Hello, World!]
String nullStr = null; // null 값을 가지는 문자열 변수
Optional<String> optionalNullStr = Optional.ofNullable(nullStr); // Optional 객체 생성, 값이 null이므로 ofNullable() 메서드 사용
System.out.println(optionalNullStr); // 출력: Optional.empty
Optional<String> emptyOptional = Optional.empty(); // 값을 갖지 않는 빈 Optional 객체 생성
System.out.println(emptyOptional); // 출력: Optional.empty
}
}
1) Optional 변수에 Null을 할당하지 않기
2) 값이 없을 때 Optional.orElseX()로 값을 반환하기
3) 단순히 값을 얻으려는 목적으로만 Optional을 사용하지 않기
4) 생성자, 수정자, 메소드 파라미터 등으로 Optional을 넘기지 않기
5) Collection의 경우 Optional이 아닌 빈 Collection을 사용하기
6) 반환 타입으로만 사용하기