정의
NullPointException을 예방하기 위해 사용
optional을 통해 null참조를 명시적으로 처리할 수 있음
값이 존재할 수도 있고, 존재하지 않을 수 있는 상황을 유연하게 처리하기 위한 도구
예제
import java.util.Optional;
// 옵셔널 : null 처리
public class App {
public static void main(String[] args) {
String data1 = null;
Optional<String> op1 = Optional.ofNullable(data1);
if(op1.isPresent()) {
String r1 = op1.get();
System.out.println("r1 : " + r1);
}
String data2 = "null";
// orElseGet : data2에 값이 없으면 람다 활용 Supplier get에 문자열을 담아 호출
String r2 = Optional.ofNullable(data2).orElseGet(() -> "없어");
System.out.println("r2 : " + r2);
String data3 = null;
// orElseThrow : data2에 값이 없으면 람다 활용 exception 호출
String r3= Optional.ofNullable(data3). orElseThrow(() -> new RuntimeException("값이 없는데???"));
System.out.println("r2 : " + r2);
}
}
장점
- NullPointException 방지 : 명시적으로 값을 확인하고 처리함으로 NullPointException 예방
- 코드 가독성 향상 : 값이 존재할 수 있는지 여부를 명확하게 표현
- 명시적 표현 : null 처리를 더 명확하게 표현
단점
- 메모리 사용 증가 : Optional 객체는 래핑된 객체를 포함하기 때문에 메모리 사용이 증가
- 오버헤드 : 간단한 값 처리에도 불필요한 오버헤드를 초래할 수 있음
- 남용 가능성 : 모든 경우에 사용할 필요 없으며, 잘못 사용하면 오히려 코드가 복잡
- 부적절한 예외 회피 : 모든 null을 optional로 감싸는 것이 좋은 방법 X, 적절할 예외처리가 필요
Share article