Open hgene0929 opened 1 year ago
if(object == null) ? null 이라면..
Student student = new Student();
if(student == null) {
boolean isNull = true;
} // 기존의 로직
boolean isNull = Objects.isNull(student);
boolean isNotNull = Objects.nonNull(student);
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
static class Student {
String name;
String certification;
Address address;
public Student(String name, String certification, Address address) {
this.name = name;
this.certification = Objects.isNull(certification) ? "없음" : certification;
this.address = Objects.isNull(address) ? Address.isEmpty() : address;
}
}
// 메서드 오버로딩으로 null 체크를 없애자.
public Student(String name) {
this.name = name;
}
public Student(String name, String certification) {
this.name = name;
this.certification = certification;
}
public Student(String name, Address address) {
this.name = name;
this.address = address;
}
public Student(String name, String certification, Address address) {
this.name = name;
this.certification = certification;
this.address = address;
}
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
// 자매품
Collections.emptyMap();
Collections.emptySet();
// private Constructor
private Optional() {
this.value = null;
}
private Optional(T value) {
this.value = Objects.requireNonNull(value);
}
// static factory
public static<T> Optional<T> empty() {
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
public static <T> Optional<T> of(T value) { // -> value에 null이 들어가면 NPE!
return new Optional<>(value);
}
public static <T> Optional<T> ofNullable(T value) { // null 가능성이 있다면 사용
return value == null ? empty() : of(value);
}
멤버 변수에 Optional 선언은 안티 패턴이다.
collection에는 optional을 사용하지 말자.
optional을 파라미터로 넘기지 않기
종단 메서드를 사용하기 위해 너무 남용하면 오히려 가독성이 떨어질 수 있다.
문제
Java의 null 처리 방법에는 Optional 이외에도 requiredNonNull, assert 등이 있는 것으로 알고 있습니다. 이들과 Optional은 각각 어떻게 사용되는지 차이점이나 특징, 사용사례 등에 대해 알고싶습니다.
contents - 세부 내용
Optional을 다루는 김에 Java의 null 처리 방법에 대해 정리하고 싶습니다.