Java Optional

OneTwoThree·2023년 6월 14일
0

자바

목록 보기
8/19

참고링크

NPE

  • NullPointerException을 피하려면 null 여부를 검사 해야함
  • null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거로워짐

Optional 이란?

  • Optional<T> 클래스를 사용해 NPE를 방지할 수 있도록 도와줌
  • null 이 올 수 있는 값을 감싸는 Wrapper 클래스
  • 참조하더라도 NPE가 발생하지 않도록 도와줌
  • 값이 null이더라도 바로 NPE가 발생하지 않으며 각종 메소드를 제공해줌

Optional 활용법

값이 null 인 경우

Optional<String> optional = Optional.empty();
  • Optional은 Wrapper 클래스이므로 값이 없을 수도 있다

값이 null이 아닌 경우

Optional<string> optional = Optional.of("MyName");
  • 어떤 데이터가 절대 null이 아니라면 Optional.of()로 생성 가능함
  • Optional.of(null)을 하려고 하면 NPE 발생

값이 null일 수도, 아닐 수도 있는 경우

Optional<String> optional = Optional.ofNullable(getName());
//값이 null이라면 anonymous를 리턴함 
String name = optional.orElse("anonymous");
  • 어떤 값이 null일 수도 아닐 수도 있으면 Optional.ofNullable()로 생성함
  • 이후 orElse() 또는 orElseget()을 사용해 안전하게 값을 가져올 수 있음

값 꺼내기

Optional 에서 값을 꺼낼 때는
.get()으로 값을 꺼낼 수 있음

ifPresent()

    //회원 가입
    public Long join(Member member){
        //이름이 중복되는 회원이 없어야함
        Optional<Member> result = memberRepository.findByName(member.getName());
        result.ifPresent(m->{
            throw new IllegalStateException("이미 존재하는  회원입니다");
        });

        memberRepository.save(member);
        return member.getId();
    }
  • findByName의 반환형이 Optional임
  • Optional은 ifPresent로 null이 아니면 특정 동작 수행
    //회원 가입
    public Long join(Member member){
        //이름이 중복되는 회원이 없어야함
        memberRepository.findByName(member.getName())
                        .ifPresent(m->{
                            throw new IllegalStateException("이미 존재하는 회원입니다");
                        });

        memberRepository.save(member);
        return member.getId();
    }
  • 위와 같이 더 깔끔하게 짤 수 있음

0개의 댓글