본문 바로가기
[JAVA]/JAVA 기본

NPE와 Optional에 대해 간단히 알아보기

by 팡펑퐁 2023. 6. 13.
728x90

NullPointerException(NPE)

  • 자바로 개발할 때 가장 많이 접하게 되는 런타임 예외이다.
  • null인 개체에 액세스 하거나 작업을 수행하려고 할 때 발생한다.
  • 다른 말로 유효하지 않은 인스턴스나 메모리 위치를 참조하여 발생하는 에러이다.

 

 

NPE가 터지는 예

  • 일반적으로 초기화되지 않은 변수를 사용하려고 시도하는 경우
  • 객체를 사용하기 전에 null 값을 제대로 확인하지 않은 경우
  • 객체 참조를 잘못 처리하는 경우

 

정리

  • 위의 예와 같이 프로그램에 논리적 결함이 있을 때 개발자에게 알려주는 역할을 한다.
  • NPE가 발생하지 않게 코드에서 적절한 null 검사 및 에러 처리가 가능하다.
  • 그중 하나가 이 글에서 알아볼 Optional이다.

 

 

Optional

  • Java8에 추가된 기능으로 null이 올 수 있는 값을 감싸는 Wrapper 클래스이다.
  • Optional<T> 클래스를 통해 null을 참조하더라도 NPE가 발생하지 않게 한다.

 

 

Optional에서 제공하는 메서드

Optional.empty()

  • 값이 null이다.
public static<T> Optional<T> empty() {
    @SuppressWarnings("unchecked")
    Optional<T> t = (Optional<T>) EMPTY;
    return t;
}
    
System.out.println(empty.isEmpty()); // true

 

Optional.of()

Optional<String> optional = Optional.of("황인팁");
  • 값이 null이 아니다.
  • 매개변수로 있는 값을 포함하는 Optional 인스턴스로 반환한다.
  • 만약 매개변수의 값이 null이면 NullPointerException이 발생한다.

 

 

Optional.ofNullable()

Optional<String> optional = Optional.ofNullable(member.getName());
String name = optional.orElse("익명 사용자"); 
//null이 아니면 값을 넣고, null이면 "익명 사용자"를 넣는다.
  • 값에 null이 올 수 도, 안 올 수도 있다.
  • orElse와 같은 메서드를 이용해  값이 없는 경우에는 null이 아닌 지정한 값을 가져올 수 있다.

 

orElse와 orElseGet의 차이

orElse

  • 파라미터로 값을 받는다.

orElseGet

  • 파라미터로 함수형 인터페이스를 받는다.

 

 

 

참고

chatGPT

https://mangkyu.tistory.com/70

 

 

728x90