John's Code Journey

[JAVA] Optional - Null 다루기 본문

IT공부/JAVA

[JAVA] Optional - Null 다루기

Johnnnn 2025. 4. 24. 15:14
728x90

🌱 Optional 쉽게 이해하기

✅ 1. Optional이 뭐야?

Optional은 값이 있을 수도 있고, 없을 수도 있다는 걸 감싸는 상자(Box) 같은 거

  • 값이 있으면 → 상자 안에 들어 있음
  • 값이 없으면 → 비어 있음 (null 아님!)

이 상자를 쓰는 이유는 null 때문에 프로그램이 갑자기 죽는 걸 막기 위해서

 

✅ 2. Optional이 없을 때 예시 (나쁜 예)

public class Main {
    public static String getName() {
        return null; // 값이 없을 수도 있어!
    }

    public static void main(String[] args) {
        String name = getName();
        System.out.println(name.length()); // 💥 여기서 에러! NullPointerException
    }
}

✅ 3. Optional이 있으면? (좋은 예)

import java.util.Optional;

public class Main {
    public static Optional<String> getName() {
        return Optional.ofNullable(null); // 값이 없을 수도 있어!
    }

    public static void main(String[] args) {
        Optional<String> name = getName();

        if (name.isPresent()) {
            System.out.println(name.get().length()); // 값이 있으면 안전하게 꺼내서 사용
        } else {
            System.out.println("이름이 없습니다.");
        }
    }
}

 

📦 Optional 사용법 

✔ Optional.of()

Optional<String> name = Optional.of("홍길동");
  • 절대 null 넣으면 안 됨
  • null 넣으면 오류 발생

✔ Optional.ofNullable()

Optional<String> name = Optional.ofNullable(null); // null 넣어도 OK!
  • null이 들어가면 내부적으로 "빈 상자"가 됨
  • 값이 있으면 넣고, 없으면 비워놓을 수 있어

✔ Optional.empty()

Optional<String> name = Optional.empty(); // 아예 빈 상자

✔ isPresent()

if (name.isPresent()) {
       System.out.println("값이 있음");
}
  • 값이 있으면 true
  • 값이 없으면 false

✔ get()

if (name.isPresent()) {
       String realName = name.get();  // 안전하게 꺼낼 수 있음
       System.out.println(realName);
}
  • 꼭 isPresent()로 체크하고 써야 함

✔ orElse()

String result = name.orElse("기본값");
System.out.println(result);
  • 값이 있으면 그 값 사용
  • 값이 없으면 "기본값" 사용

🎁 예제: 학생 이름 가져오기

import java.util.Optional;

public class Main {
    public static Optional<String> getStudentName(int id) {
        if (id == 1) {
            return Optional.of("철수");
        } else {
            return Optional.empty(); // 이름 없음
        }
    }

    public static void main(String[] args) {
        Optional<String> name = getStudentName(2);

        if (name.isPresent()) {
            System.out.println("학생 이름: " + name.get());
        } else {
            System.out.println("학생 이름이 없습니다.");
        }
    }
}

💡 기억하면 좋은 팁

상황 방법
값이 무조건 있음 Optional.of(값)
값이 있을 수도 없음 Optional.ofNullable(값)
빈 상태로 만들기 Optional.empty()
값 꺼낼 때 isPresent() + get()
값 없을 때 기본값 쓰기 orElse("기본값")