🔥 포스팅 계기
Java 로직을 구현하다 보면 NullPointerException을 자주 볼 수 있습니다
애초에 문자를 넣고 초기화할 수도 있겠지만 쿼리에서 param != null 같은 옵션을 사용할 수도 있고
운영 단계에서는 이미 만들어진 데이터를 가공해서 써야 하기 때문에 매번 null 체크를 해야 하는 번거로움이 있었습니다.
그런데
귤에 붙어 있는 하얀 거 이름은.. 아니아니
Null 체크가 필요 없는 equals()가 있다면 어떨까요?
📍 equals()와 Objects.equlas()의 차이
👉🏻 문자열을 비교할 때 사용하는 equals()
👉🏻 하지만 아래 예시처럼 a가 null일 경우, 에러가 발생하기 때문에 equals()를 사용할 때는 null 예외 처리가 필요함
public class Equals {
public static void main(String[] args) {
String a = null;
String b = "aa";
System.out.println(a.equals(b)); // NullPointException 발생!
}
}
👉🏻 어려운 부분은 아니지만 이 부분이 생각보다 코드가 번잡해 보이고 까먹을 우려도 있음
public class Equals {
public static void main(String[] args) {
String a = null;
String b = "aa";
if(aa != null && aa.equals(bb)) {
System.out.println("a equal to b");
}
}
}
👉🏻 Objects.equlas()는 null 에러 없이 null과 문자열 비교가 가능해짐
public class Equals {
public static void main(String[] args) {
String a = null;
String b = null;
String c = "attn";
String d = "attn";
System.out.println(Objects.equals(a, b)); // true
System.out.println(Objects.equals(c, d)); // true
System.out.println(Objects.equals(a, c)); // false
}
}
👉🏻 참고로 해당 함수는 자바 8부터 등장함
//Objects.equals()
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
📍 Objects.equals()의 사용
👉🏻 equlas()를 사용했을 때 오류 발생하는 코드
/** equals(), Object.equlas()의 차이 확인 */
AtnBasicsConfigVO test1 = new AtnBasicsConfigVO();
AtnBasicsConfigVO test2 = new AtnBasicsConfigVO();
test1.setAplyBgnDe(null);
test2.setAplyBgnDe("20241107");
try {
if(test1.getAplyBgnDe().equals(test2.getAplyBgnDe())){
System.out.println("test1, test2 일치함");
} else {
System.out.println("test1, test2 일치하지 않음");
}
} catch(Exception e) {
System.out.println("equlas 비교 중 에러 발생!");
e.printStackTrace();
}
👉🏻 Objects.equals를 사용하면 어떻게 바뀔까?
/** equals(), Object.equlas()의 차이 확인 */
AtnBasicsConfigVO test1 = new AtnBasicsConfigVO();
AtnBasicsConfigVO test2 = new AtnBasicsConfigVO();
test1.setAplyBgnDe("20241107");
test2.setAplyBgnDe(null);
try {
if(Objects.equals(test1.getAplyBgnDe(), test2.getAplyBgnDe())){
System.out.println("test1, test2 일치함");
} else {
System.out.println("test1, test2 일치하지 않음");
}
} catch(Exception e) {
System.out.println("equlas 비교 중 에러 발생!");
e.printStackTrace();
}
👉🏻 아주 유용하게 쓸 수 있을 듯하다 (づ ̄ 3 ̄)づ