게으른 개발자의 끄적거림

Java Null Pointer 역참조란?

끄적잉 2024. 7. 25. 22:53
728x90

 

 NullPointerException (NPE)는 Java 프로그래밍에서 객체 참조가 null인 상태에서 해당 객체의 멤버나 메서드에 접근하려 할 때 발생합니다. 이 문제를 해결하는 방법은 여러 가지가 있으며, 상황에 따라 다르게 적용할 수 있습니다. 다음은 NPE를 방지하고 해결하는 방법들에 대한 자세한 설명입니다.

 


### 1. Null Check
가장 기본적이면서 중요한 방법은 객체가 null인지 확인하는 것입니다.

```java
if (object != null) {
    object.doSomething();
}
```

 


### 2. Optional 클래스 사용
Java 8부터 추가된 `Optional` 클래스를 사용하면 null을 안전하게 처리할 수 있습니다.

```java
Optional<String> optionalString = Optional.ofNullable(maybeNullString);
optionalString.ifPresent(s -> System.out.println(s));
```

 


### 3. @NonNull 어노테이션 사용
많은 IDE와 빌드 도구는 @NonNull 어노테이션을 사용하여 null 값 사용을 방지할 수 있습니다. 이 어노테이션은 주로 Lombok 라이브러리와 함께 사용됩니다.

```java
import lombok.NonNull;

public void doSomething(@NonNull String param) {
    // param이 null이 아님을 보장받음
}
```

 


### 4. 초기화 확인
필드가 사용되기 전에 초기화되어 있는지 확인합니다. 이는 생성자에서 객체를 초기화하거나, 초기화 블록을 사용하는 방식으로 할 수 있습니다.

```java
public class MyClass {
    private MyObject myObject;

    public MyClass() {
        this.myObject = new MyObject();
    }

    public void doSomething() {
        myObject.doSomething();
    }
}
```

 


### 5. 기본 값 할당
필드에 기본 값을 할당하여 null을 피할 수 있습니다.

```java
public class MyClass {
    private String myString = "";

    public void doSomething() {
        System.out.println(myString.length());
    }
}
```

 


### 6. 유효성 검사를 통한 NullPointerException 예방
메서드의 매개변수로 null이 전달되지 않도록 유효성 검사를 수행합니다.

```java
public void doSomething(String param) {
    if (param == null) {
        throw new IllegalArgumentException("Parameter cannot be null");
    }
    // 나머지 코드
}
```

 


### 7. 로그와 디버깅
null 값을 추적하기 위해 로그를 남기거나 디버거를 사용하여 어떤 시점에서 null이 발생하는지 확인합니다.

```java
public void doSomething(String param) {
    if (param == null) {
        System.out.println("param is null");
        return;
    }
    // 나머지 코드
}
```

 


### 8. 제어 흐름을 통한 NullPointerException 예방
코드 흐름을 설계할 때, 가능한 null을 다루지 않도록 구조를 짜는 것이 중요합니다. 예를 들어, null을 반환하지 않도록 메서드를 작성합니다.

```java
public List<String> getItems() {
    List<String> items = fetchItemsFromDatabase();
    return items != null ? items : Collections.emptyList();
}
```

이 방법들을 조합하여 사용하면 NullPointerException 발생 가능성을 크게 줄일 수 있습니다. Java의 특성상 완전히 피할 수는 없겠지만, 위의 방법들을 통해 안정적인 코드를 작성할 수 있습니다.

728x90

'게으른 개발자의 끄적거림' 카테고리의 다른 글

IT 솔루션이란?  (0) 2024.07.30
로깅 System.out.println() 쓰면 안되는 이유  (0) 2024.07.29
(?!) 이란?  (1) 2024.07.24
dll파일이란?  (0) 2024.07.16
Java throws Exception vs throw new Exception 차이점  (0) 2024.07.15