티스토리 뷰

Null Pointer Exception. 아마 자바를 사용하면서 많이 보게 되는 에러중에 하나일 것이다.

자바에서는 거의 모든 것들이 레퍼런스이기 때문에, 거의 모든 것들이 null이 될 가능성이 있다.

따라서 항상 null을 확인할 필요가 있다. (기존에는)

//User.java
public class User {
    public static User EMPTY = new USER(0, "");
    
    private int age;
    private String name;
    
    public User(int age, String name) {
        this.age = age;
        this.name = name;
    }
}
//Main.java
public class Main {
    public static void main(String[] args) {
        User user = new User(25, "Ted");
        User user2 = null;
        System.out.println(user);
        // System.out.println(user2); -> NPE 발생
    }
}

자바 8부터는 null을 쓰지 말자고 약속을 했다.

이 방법에는 여러가지가 있다.

위와 같이 NPE가 발생하지 않게 하기 위해서는, null 사용 대신에 null이라는 것을 표현할 수 있는 무언가를 넣어주어야 한다.

해당 방법들을 알아본다.

 

  1. static 변수 이용
    이 방법은 User.EMPTY 등 null을 표현하는 다른 방법이 있다는 것을 알아야만 사용이 가능하다.
    //Main.java
    public class Main {
        public static void main(String[] args) {
            User user = User.EMPTY;
            if (user == User.EMPTY) {
                //로직 작성
            }
        }
    }​
  2. Optional 이용 = null이 될 수도 있고, null이 되지 않을 수도 있을 때 사용 가능.
    Optional은 내부 데이터를 매핑한다. 내부 데이터가 null이면 null을 감싸는 변수를 반환한다.
    //Main.java
    public class Main {
        public static void main(String[] args) {
            Optional<User> optionalUser = Optional.empty(); // null값
            optionalUser = Optional.of(new User(1, "2")); // 값 넣기
            optionalUser.isEmpty(); // 값이 없으면(null이면) true
            optionalUser.isPresent(); // 값이 있으면 true
            //아래 네 표현은 같은 기능을 한다. (단, 세 번째는 null인 경우 처리 안 함)
            if (optionalUser.isPresent()) {
            } else {
            }
            
            if (optionalUser.isEmpty()) {
            } else {
            }
            
            optionalUser.ifPresent(user -> {
            });
            
            optionalUser.ifPresentOrElse(user -> {
            }, () -> {
            });
        }
    }

 

728x90
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함