자바

null이란?

Blue_bull 2025. 2. 8. 23:58

🚀 null이란?

nullJava에서 "아무것도 없는 상태"를 의미하는 특별한 값입니다.
즉, 참조형(객체) 변수가 메모리에 어떤 객체도 가리키지 않고 있는 상태입니다.


✅ 1️⃣ null이 적용되는 대상

null참조형 변수(객체)에만 적용되며, 기본형(int, double, boolean 등)에는 적용되지 않습니다.

📌 예제 (참조형 변수에 null 적용 가능)

String text = null; // ✅ 문자열 변수가 어떤 객체도 가리키지 않음
Integer number = null; // ✅ 래퍼 클래스(참조형)에서는 사용 가능

📌 기본형 변수에는 null을 사용할 수 없음

int num = null; // ❌ 오류 발생 (기본형 변수에는 `null` 사용 불가)

✔ 기본형(int, double, boolean)은 null을 가질 수 없음.
✔ 대신 기본형 대신 Integer, Double, Boolean 등의 래퍼 클래스 사용 가능.


✅ 2️⃣ null의 특징

1️⃣ null을 가진 변수는 어떤 객체도 참조하지 않음.
2️⃣ null인 객체에서 메서드를 호출하면 NullPointerException (NPE) 발생.
3️⃣ 기본형에는 null을 사용할 수 없음.
4️⃣ 배열이나 컬렉션에도 null 요소가 포함될 수 있음.
5️⃣ null을 방지하는 습관이 중요함!


✅ 3️⃣ null로 인해 발생할 수 있는 문제점

📌 1. NullPointerException 발생

String text = null;
System.out.println(text.length()); // ❌ NullPointerException 발생

해결 방법: null 체크 후 실행

if (text != null) {
    System.out.println(text.length());
} else {
    System.out.println("text is null");
}

📌 2. null을 안전하게 다루는 방법

  • "값".equals(변수) 패턴 사용 (null 방지)

    String name = null;
    if ("Java".equals(name)) { // ✅ NullPointerException 방지
      System.out.println("Match!");
    }
  • Optional 사용 (null 방지하는 최선의 방법!)

    import java.util.Optional;
    

Optional text = Optional.ofNullable(null);
System.out.println(text.orElse("Default Value")); // ✅ "Default Value"


---

## **🚀 결론**
✔ `null`은 **객체가 존재하지 않는 상태**를 의미.  
✔ 기본형에는 사용할 수 없으며, **참조형 변수에만 적용 가능**.  
✔ `null`을 조심하지 않으면 `NullPointerException`이 발생할 수 있음.  
✔ `null`을 방지하기 위해 **`if` 체크, `"값".equals(변수)`, `Optional` 등을 활용**하면 안전한 코드 작성 가능! 🚀


### **🚀 Java에서 `null`로 인해 발생할 수 있는 오류들 & 해결 방법 (팩트 체크 & 수정)**
`null`은 **객체가 존재하지 않음을 의미하는 값**입니다.  
초급 웹 개발자로서 **데이터를 안정적으로 다루려면 `null` 관련 오류를 예방하는 것이 중요합니다.**

---

---

## **✅ 1️⃣ `NullPointerException` (NPE)**
가장 흔한 `null` 관련 오류는 **`NullPointerException(NPE)`**입니다.
- **객체가 `null`인 상태에서 메서드 호출이나 필드 접근을 시도할 때 발생**합니다.

### **📌 예제 코드 (`NullPointerException` 발생)**
```java
public class Example {
    public static void main(String[] args) {
        String text = null;
        System.out.println(text.length()); // ❌ NullPointerException 발생
    }
}

💡 해결 방법

null 체크 (if 문 사용)
Objects.requireNonNull() 사용
Optional 활용

if (text != null) {
    System.out.println(text.length()); 
} else {
    System.out.println("text is null!");
}

✅ 2️⃣ ArrayIndexOutOfBoundsException vs NullPointerException

배열이 null이면 NullPointerException 발생.
잘못된 인덱스로 접근하면 ArrayIndexOutOfBoundsException 발생.

📌 예제 코드 (NullPointerException 발생)

public class Example {
    public static void main(String[] args) {
        String[] arr = null;
        System.out.println(arr.length); // ❌ NullPointerException 발생
    }
}

arr 자체가 null이므로 .length에 접근하면 NullPointerException 발생.

📌 예제 코드 (ArrayIndexOutOfBoundsException 발생)

public class Example {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        System.out.println(numbers[5]); // ❌ ArrayIndexOutOfBoundsException 발생
    }
}

numbers[5]는 배열 크기(3)를 초과하는 인덱스이므로 ArrayIndexOutOfBoundsException 발생.

💡 해결 방법

null 체크 후 배열 접근

if (arr != null) {
    System.out.println(arr.length);
}

인덱스 범위 확인

if (numbers.length > 5) {
    System.out.println(numbers[5]);
}

✅ 3️⃣ NumberFormatException

문자열이 null이거나 숫자로 변환할 수 없는 경우 발생.

📌 예제 코드 (NumberFormatException 발생)

public class Example {
    public static void main(String[] args) {
        String number = "abc"; // 숫자가 아닌 문자열
        int value = Integer.parseInt(number); // ❌ NumberFormatException 발생
    }
}

💡 해결 방법

null 체크 후 변환
✔ 예외 처리 (try-catch) 사용

if (number != null) {
    try {
        int value = Integer.parseInt(number);
    } catch (NumberFormatException e) {
        System.out.println("Invalid number format");
    }
}

✅ 4️⃣ NullPointerException을 발생시키는 equals() 사용

객체가 null일 때 .equals()를 호출하면 NullPointerException이 발생.

📌 예제 코드 (NullPointerException 발생)

public class Example {
    public static void main(String[] args) {
        String name = null;
        if (name.equals("Java")) { // ❌ NullPointerException 발생
            System.out.println("Match!");
        }
    }
}

💡 해결 방법

"값".equals(변수) 패턴 사용 → null 안전한 방식

if ("Java".equals(name)) { // ✅ NullPointerException 방지
    System.out.println("Match!");
}

✅ 5️⃣ Optional을 사용하여 null 방지하기

Optionalnull을 방지하는 강력한 도구.
Optional.ofNullable(value)을 사용하면 null일 경우 안전하게 감싸줌.
orElse(defaultValue)null일 때 기본값 제공.

📌 Optional 예제

import java.util.Optional;

public class Example {
    public static void main(String[] args) {
        Optional<String> text = Optional.ofNullable(null);
        System.out.println(text.orElse("Default Value")); // ✅ "Default Value" 출력
    }
}

🚀 결론: null을 안전하게 다루는 방법

1️⃣ null 체크 (if 문 사용)
2️⃣ .equals() 호출 시 `"값".equals(변수)" 패턴 사용
3️⃣ 배열과 리스트는 null 체크 후 .length.size() 호출
4️⃣ 숫자 변환 시 예외 처리 (try-catch)
5️⃣ Optional을 사용하여 null 방지

📌 초급 웹 개발자로서 데이터를 다룰 때 null을 반드시 체크하는 습관을 들이면 안전한 코드를 작성할 수 있습니다! 🚀