null이란?
null은 프로그래밍에서 값이 없음 또는 참조하지 않음을 나타내는 키워드를 말한다.
null 직접 처리의 한계
null인 객체를 호출하거나 접근하려 하면 NullPointerException이 발생한다. 이는 런타임 예외로 컴파일러가 미리 잡아주지 못하며, 예외가 발생했을 때 처리해주지 못하면 프로그램이 종료된다. if문을 활용하여 null을 처리할 수는 있지만 모든 상황을 미리 예측하고 처리하는 것은 현실적으로 힘들다.
Optional이란?
Optional은 null을 안전하게 다루기 위한 클래스이다. null을 직접 다루는 대신 Optional을 사용하면 NullPointerException을 방지할 수 있다.
Optional 활용
- Optional 객체는 값이 있을 수도 있고 없을 수도 있는 컨테이너이다.
- Optional 객체를 메서드 반환 자료형에 선언해서 해당 메서드가 null 이 반환될 가능성을 명확하게 전달할 수 있다.
- Optional.ofNullable()을 사용하여 null 이 반환될 수 있는 객체를 감싼다.
- 값을 사용할 땐 isPresent() 같은 메서드로 값이 있는지 먼저 확인하고 안전하게 처리할 수 있다.
1) isPresent() 활용 방법
- Optional 내부의 값이 존재할 경우: true를 반환
- Optional 내부 값이 null일 경우: false를 반환
import java.util.Optional;
public class Camp {
private Student student;
// null 이 반환될 수 있음을 명확하게 표시
public Optional<Student> getStudent() {
return Optional.ofNullable(student);
}
}
public class Main {
public static void main(String[] args) {
Camp camp = new Camp();
// Optional 객체 반환받음
Optional<Student> studentOptional = camp.getStudent();
// Optional 객체의 기능 활용
boolean flag = studentOptional.isPresent(); // false 반환
if (flag) {
// 존재할 경우
Student student = studentOptional.get(); // 안전하게 Student 객체 가져오기
String studentName = student.getName();
System.out.println("studentName = " + studentName);
} else {
// null 일 경우
System.out.println("학생이 없습니다.");
}
}
}
2) orElseGet() 활용 방법
- orElseGet()은 값이 없을 때만 기본값을 제공하는 로직을 실행하는 메서드이다.
- 메서드를 매개변수로 전달한다.
import java.util.Optional;
public class Camp {
private Student student;
// null 이 반환될 수 있음을 명확하게 표시
public Optional<Student> getStudent() {
return Optional.ofNullable(student);
}
}
import java.util.Optional;
public class Main {
public static void main(String[] args) {
Camp camp = new Camp();
// Optional 객체의 기능 활용 (orElseGet 사용)
Student student = camp.getStudent()
.orElseGet(() -> new Student("미등록 학생"));
System.out.println("studentName = " + student.getName());
}
}'Java' 카테고리의 다른 글
| [Java] 명명 규칙 (0) | 2025.04.23 |
|---|---|
| [Java] Enum (0) | 2025.04.21 |
| [Java] 예외와 예외 처리 (1) | 2025.04.17 |
| [Java] JVM 메모리 (0) | 2025.04.17 |
| [Java] 객체지향 - 캡슐화 / 상속 / 추상화 / 다형성 (0) | 2025.04.17 |