[Java] Java에서 값이 없는 상황(null)을 처리하는 방법은? (null vs Optional)
1. Question
Java에서 값이 없는 상황(null)을 처리하는 방법은?
2. Answer
Java에서 null 값은 값이 없음을 나타내며, 이를 잘못 다루면 NullPointerException이 발생하여 프로그램의 안정성을 해칠 수 있다. 이러한 문제를 해결하기 위해 다양한 방법이 있으며, 이를 통해 예기치 않은 에러를 방지하고 코드의 가독성 및 유지보수성을 향상시킬 수 있다.
A. 전통적인 null 확인
public String getUsername(User user) {
if (user != null) {
return user.getName();
} else {
return "No name";
}
}
이 코드는 User 객체가 null인지 확인하고, null이 아니라면 사용자 이름을 반환하며, null이면 “No name”을 반환한다. 이 방법은 단순하지만, 객체의 속성에 접근하거나 메서드를 호출할 때마다 반복적으로 null 검사를 해야 하므로 코드가 복잡해질 수 있다.
B. Optional 클래스 사용
Java 8이상에서는 Optional 클래스를 사용하여 null을 보다 우아하게 처리할 수 있다. Optional은 값이 있거나 없을 수 있는 컨테이너 객체로, null 체크를 명시적으로 하지 않고도 NullPointerException을 방지할 수 있게 해준다.
public String getUsername(Optional<User> user) {
return user.map(User::getName).orElse("No name");
}
이 코드는 Optional을 사용하여 User 객체의 존재 여부를 판단하고, User 객체가 존재한다면 그의 이름을 반환하며, 존재하지 않는다면 “No name”을 반환한다. 이 방식은 코드를 간결하게 만들고, null을 직접 다루는 것보다 안전하게 값을 처리할 수 있게 해준다.
3. Detail
A. null 사용의 문제점
-
에러의 근원이다:
NullPointerException은 자바에서 가장 흔히 발생하는 에러다. -
코드를 어지럽힌다: 때로는 중첩된
null확인 코드를 추가해야 하므로,null때문에 코드 가독성이 떨어진다. -
아무 의미가 없다:
null은 아무 의미도 표현하지 않는다. 특히 정적 형식 언어에서 값이 없음을 표현하는 방법으로는 적절하지 않다. -
자바 철학에 위배된다: 자바는 개발자로부터 모든 포인터를 숨겼다. 하지만 예외가 있는데 그것이 바로
null포인터다. -
형식 시스템에 구멍을 만든다:
null은 무형식이며 정보를 포함하고 있지 않으므로, 모든 참조 형식에null을 할당할 수 있다. 이런 식으로null이 할당되기 시작하면서 시스템의 다른 부분으로null이 퍼졌을 때 애초에null이 어떤 의미로 사용되었는지 알 수 없다.
B. Optional 클래스 세부 설명
[Java] Optional 클래스란? [Java] Optional 클래스 사용 방법은? [Java] Optional을 사용한 실용 예제에는 어떤 것들이 있는가?
4. Reference
- “모던 자바 인 액션” (저자: 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트)
댓글남기기