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
'[JAVA] > JAVA 기본' 카테고리의 다른 글
정적 팩토리 메서드의 특징과 사용법을 예제로 이해하기 (0) | 2023.06.20 |
---|---|
Comparable과 Comparator.comparing() 간단 정리 (0) | 2023.06.14 |
BindingResult에 대해 간단히 알아보기 (0) | 2023.06.13 |
내부 클래스를 static으로 선언해야 하는 이유 (2) | 2023.06.09 |
try - catch 문을 여러 경우의 수로 한 번에 이해해보자. (0) | 2023.05.24 |