ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] Optional<T>
    프로그래밍/JAVA 2023. 3. 12. 10:54
    728x90

     

     

    Optional을 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있다.

    즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 된다.

     

     

    Optional를 사용하지 않을 경우, 조건문을 사용하여 null 체크를 해줘야한다.

    List<Member> member = memberRepository.findById(id); // member == null 일경우
    
    String name = member.getName(); // NullPointerException 발생
    List<Member> member = memberRepository.findById(id); // member == null 일경우
    String name = "";
    
    if(member != null){
    	 name = member.getName();
    }

     

     

    Optional를 사용하기 위한 관련 메소드를 알아보자.

     

    1. get()

    Optional을 사용하여 Optional에 저장된 값은 get() 메서드를 통해 접근할 수 있다.\

    Optional<Member> member = memberRepository.findById(id);
    Member mem = member.get();

    다만 직접 get()를 호출하기 전에 Optional 객체에 값이 저장되어있는지 확인하고 호출해야한다. 

    만일 저장된 값이 없으면 NullPointerException 이 발생하게 된다. get()호출하기전 isPresent() 메소드를 활용하여 null 체크를 진행할 수 있다.

     

     

     

    2. isPresent()

    Optional 객체가 값을 가지고 있다면 true, 값이 없다면 false 리턴한다.

    Optional<Member> member = memberRepository.findById(id);
    String name = "";
    
    if(member.isPresent()){ // member에 값이 있을 경우 true
    	Member mem = member.get();
    	name = mem.getName();
    }

     

     

     

    3. ifPresent()

    Optional 객체가 값을 가지고 있으면 화살표 함수를 사용하여 함수를 실행하고 값이 없으면 다음으로 넘어간다.

    String name = "";
    
    member = memberRepository.findById(idx).ifpresent(mem -> {
    	name = mem.getName();
    });

     

     

     

    4. orElse()

    Optional 객체에 값 여부는 isPresent() 메소드 외 orElse()로도 가능하다. Optional 객체에 값이 저장되지 않았을 경우 orElse() 메소드를 통해 명시된 값을 대신 반환한다.

    Member member = memberRepository.findById(id).orElse(new Member());

     

     

     

    5. orElseThrow()

    Optional 객체에 값이 저장되어있지 않을 경우, 명시적으로 예외를 던질 때 사용한다.

    Member member = memberRepository.findById(id)
    			.orElseThrow(new NoSuchElementException("Person not found"));

     

     

     

     

     

    728x90

    '프로그래밍 > JAVA' 카테고리의 다른 글

    [JAVA] Arrays.sort 정렬  (0) 2024.08.30
    [Java] int[] to Integer[], Integer[] to int[]  (0) 2024.08.29
    [Java] 스트림(Stream)  (0) 2023.03.11
    [Java] Arrays.asList()  (0) 2023.03.11
    [Java] Selenium(셀레니움)  (0) 2022.08.18

    댓글

Designed by Tistory.