[Java] Optional 활용

taeni·2021년 9월 30일
0

Java Optional이란

Java8부터 지원한 NPE 방지 wrapper class

// 기존 방식
String name = userRepository.getName();

if (name != null) {
   logic(name);
}

// Optional 사용
Optional.ofNullable(userRepository.getName())
   .ifPresent((n) -> {
      logic(n);
   });

Optional 제대로 활용하기

isPresent()-get() 대신 orElse()/orElseGet() 등 사용

// not good
Optional<String> name = Optional.ofNullable(userRepository.getName());
if (name.isPresent()) {
   return name.get();
} else {
   return null;
}

// good
return Optional.ofNullable(userRepository.getName())
   .orElse(null);

null 대신 isEmpty() 사용

// not good
Optional<String> name = null;

// good
Optional<String> name = Optional.empty();

Optional<Integer> 대신 OptionalInt 사용(int, long, double)

// not good
Optional<Integer> age = Optional.of(userRepository.getAge());

// good
OptionalInt age = OptionalInt.of(userRepository.getAge());

연산이 필요하거나 객체생성이 수행되는 orElse는 orElseGet 사용

// not bad
int userCnt = Optional.ofNullable(userRepository.getUserList())
   .map(List::size)
   .orElse(0);

// not good
Optional<User> user = Optional.ofNullable(userRepository.getUser())
   .orElse(new User());
   
// good
Optional<User> user = Optional.ofNullable(userRepository.getUser())
   .orElseGet(User::new);

null이 예상되는 경우 of() 대신 ofNullable() 사용

// not good
Optional<User> user = Optional.of(userRepository.getUser()); // null이 반환될 수 있음. NPE 발생.

// good
Optional<User> user = Optional.ofNullable(userRepository.getUser());

profile
정태인의 블로그

0개의 댓글