Optional이 등장한 계기 :
메소드가 반환할 결과 값이 '없음'을 명백하게 표현할 필요가 있고, null 을 반환하면 에러가 발생할 가능성이 높은 상황에서 메소드의 반환 타입으로 Optional 을 사용하자는 것이 Optional 을 만든 주된 목적이다.
Optional 타입의 변수의 값은 절대 null 이어서는 안 되며, 항상 Optional 인스턴스를 가리켜야 한다.
Optional<T> 생성, 선언
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id)); //Null값 까지 받을 수 있음-> Null이면 Empty 객체 생성
//Optional.of(T) -> 명시한 T값을 가지고 있는 객체 생성, Null일 경우 Error
//Optional.empty() ->비어있는 객체 생성
}
isPresent(True or False), ifPresent(Consumer<? super T> action)
값이 존재하면 True or False, 값이 존재하면 action을 취하라
private void validateDuplicateMember(Member member) {
memberRepository.findByName(member.getName())
.ifPresent(m ->{
throw new IllegalStateException("이미 존재하는 회원입니다.");
});
}
옵셔널을 활용한 NPE 지옥 탈출하기
https://www.daleseo.com/java8-optional-before/
옵셔녈 관련 Optional<>
옵션 커맨드 화살표 (화면 이동? 전환?)
옵션 커맨드 v (반환값을 받을 변수 자동생성?)
illegalstateException (테스트 예외처리)
컨트롤 r (이전 실행 실행)
https://dev-coco.tistory.com/178