자바 8에서 새로 추가된 기능 Optional<E> 를 어떻게 사용하는지 알아보자.
Member member = new MemberRepository(member.findById(id));
if(member != null){
...
}else{
...
}
findById 메소드가 member 타입의 객체를 리턴한다고 하면, 만약 member가 null일 경우를 대비해 이렇게 코딩을 해야한다.
findById가 member타입 객체 말고, Optional<Member>타입의 객체를 리턴하게 한다면?
// 안 좋음
List<Member> members = team.getMembers();
return Optional.ofNullable(members);
// 좋음
List<Member> members = team.getMembers();
return members != null ? members : Collections.emptyList();
만약 회원을 조회했을때 중복회원이 있는 경우.
Optional<Member> result = memberRepository.findByName(member.getName());
result.ifPresent(m ->{
throw new IllegalStateException("이미 존재하는 회원입니다.")
}); // 이렇게 쓰면 안 예쁘니까 바로 ifPresent를 사용하게 해보자.
Optional<T> 는 굳이 변수에 안담아도 바로 .ifPresent() 사용 할 수 있다.
아래 코드를 보자.
memberRepository.findByName(member.getName())
.ifPresent(m -> { //ifPresent 는 값이 있을때 실행하는 것이다.
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}//이게 훨씬 깔끔해 보이고 좋다. 하지만, findByName을 이용한 로직이 다 보여지기 때문에, 메소드로 뽑는게 좋다. 단축키(ctrl+T)
출처 :
Java Optional 바르게 쓰기
Java Optional 바르게 쓰기Brian Goetz는 스택오버플로우에서 Optional을 만든 의도에 대해 다음과 같이 말했다. … it was not to be a general purpose Maybe type, as much as many people would have liked us to do so. Our intention w
homoefficio.github.io
자바 Optional 의 ifPresent 활용하기
자바 8에 추가된 Optional이 제공하는 ifPresent를 사용해 null을 체크하는 if 문을 줄이는 방법에 대해 설명합니다.
www.whiteship.me
자바 옵셔널 (Java Optional) :: JDM's Blog
개요 자바 옵셔널Java Optional에 대해 알아보고 자바 8부터 시작해 9, 10까지 추가된 옵셔널 메서드를 소개합니다. Java 8 Optional 자바 옵셔널은 자바 8에서 최초로 도입 되었습니다. 도입이 된 이유는
jdm.kr