프로그래머스 백엔드 1기/Java
Java Collection (3) - Optional
|테드|
2021. 8. 8. 13:35
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이라는 것을 표현할 수 있는 무언가를 넣어주어야 한다.
해당 방법들을 알아본다.
- static 변수 이용
이 방법은 User.EMPTY 등 null을 표현하는 다른 방법이 있다는 것을 알아야만 사용이 가능하다.
//Main.java public class Main { public static void main(String[] args) { User user = User.EMPTY; if (user == User.EMPTY) { //로직 작성 } } }
- 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
반응형