Optional 객체 생성법
private void createOptionalObjects() {
Optional<String> emptyString = Optional.empty();
String common = null;
Optional<String> nullableString = Optional.ofNullable(common);
common = "common";
Optional<String> commonString = Optional.of(common);
}
|
cs |
1. 데이터가 없는 객체를 생성하려면 empty() 사용
2. null이 추가될 수도 있는 상황이라면 ofNullable() 사용
3. 반드시 데이터가 들어가야하는 상황에서는 of() 사용
객체에서 값을 꺼낼 때
private void getOptionalData(Optional<String> data) throws Exception {
String defaultValue = "default";
String result1 = data.get();
String result2 = data.orElse(defaultValue);
Supplier<String> stringSupplier = new Supplier<String>() {
@Override
public String get() {
return "OptionalTest";
}
};
String result3 = data.orElseGet(stringSupplier);
Supplier<Exception> exceptionSupplier = new Supplier<Exception>() {
@Override
public Exception get() {
return new Exception();
}
};
String result4 = data.orElseThrow(exceptionSupplier);
}
|
cs |
String result1 = data.get();
1. 일반적으로는 get()을 사용한다. 비어있을경우 null값을 반환함.
String result2 = data.orElse(defaultValue);
2. orElse() 사용시 null값일때 기본값을 지정해서 사용가능함.
String result3 = data.orElseGet(stringSupplier);
3. orElseGet()은 파라미터로 단순한 값이 아닌 객체를 받아 사용할 수 있다.
orElse()는 값이 미리 존재할때 사용가능하지만 orElseGet은 값이 준비되어 있지 않을때에도 사용가능하다.
String result4 = data.orElseThrow(exceptionSupplier);
4. 데이터가 없을 경우 예외를 발생시키고 깊다면 orElseThrow()를 사용한다.
Optional 클래스를 사용하는 이유
가장 큰 목적은 NPE(NullPointerException)을 피하기 위해서이다.
DB와 연동하는 프로그램의 경우 DB의 값이 null일 경우가 있을수도 있는데
NPE를 피하고자 고전적인 방식으로는 null check 로직을 따로 준비해야 했다.
Optional을 사용하면 번거로운 과정을 줄일 수 있다.
'Java' 카테고리의 다른 글
Stream API (0) | 2022.03.02 |
---|---|
익명클래스와 람다식 (0) | 2022.03.01 |
테스트 범위와 종류 (0) | 2022.02.22 |
테스트케이스의 대역 (0) | 2022.02.21 |
TDD방법론 - 암호검사기4(WEAK CASE) (0) | 2022.02.13 |