[Java] NullPointerException을 방지하는 Objects.equals 메서드

2024. 11. 7. 11:20·🚀 from error to study/Java

 

 

 

🔥 포스팅 계기

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();
}

자비도 없이 NullPointerExcpeion을 던져 버리는 모습

 

👉🏻 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();
}

 

동일한 null 데이터를 비교했음에도 오류가 아닌 else 문에 잡히는 디버깅
동일한 데이터를 넣었을 때 일치 비교도 확인

 

a, b 두 개의 파라미터 값을 바꿔 봐도 정상 동작 확인

 

 

 

👉🏻 아주 유용하게 쓸 수 있을 듯하다 (づ ̄ 3 ̄)づ

더보기

https://simple-ing.tistory.com/2

 

Object.equals()와 equals() 의 차이

equals()의 사용 public class Equals { public static void main(String[] args) { String a = null; String b = "aa"; System.out.println(a.equals(b)); // NullPointException 발생! } } 우리는 흔하게 문자열을 비교할 때 equals()를 사용합니

simple-ing.tistory.com

https://lcs1245.tistory.com/entry/Java-equals-%EC%B4%9D-%EC%A0%95%EB%A6%AC-%EA%B0%92-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0-Objectsequals

 

Java equals 총 정리, 값 비교하기, Objects.equals()

equals 함수에 대해 살펴보도록 하겠습니다. equals()는 두 객체를 비교하는 함수로써 모든 클래스의 조상인 Object 클래스의 함수입니다. Object.equals Object 클래스의 equals() 함수는 객체의 주소를 비교

lcs1245.tistory.com

 

저작자표시 비영리 변경금지 (새창열림)
'🚀 from error to study/Java' 카테고리의 다른 글
  • An internal error occurred during: "Periodic workspace save.". Cannot parse null string 해결 방법
  • [JAVA] java.net.MalformedURLException: unknown protocol: c 오류 해결법
  • [Java] Object의 key 중복 제거 - DeduplicationUtils
  • [java] ArrayList 0번째 인덱스에 새로운 값 넣고 한 칸씩 미는 법
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[Java] NullPointerException을 방지하는 Objects.equals 메서드
상단으로

티스토리툴바