Home
Java
java.lnag.String.equals() - NullPointerExcption (NPE 오류와 개선)
devfoxstar
devfoxstar
June 14, 2022
1 min

개발자에게 NullPointerExcption 오류는 언제나 골칫거리입니다.
잊을만 하면 나타나서 개발자를 괴롭히거든요.

자바에서 equals 메소드를 쓸 때도 주의해야 합니다.
먼저 오류 상황을 보겠습니다.

String A = null;

if (A.equals("A")) {
    System.out.println("true");
} else {
    System.out.println("false");
}
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "A" is null

java.lang.String 클래스의 equals 메소드는 변수가 String일 경우에 참조가 가능합니다.
따라서 변수에 null 값이 들어가면 오류가 발생합니다.

참고로 equals 메소드의 구현 코드를 보겠습니다.

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String aString = (String)anObject;
        if (!COMPACT_STRINGS || this.coder == aString.coder) {
            return StringLatin1.equals(value, aString.value);
        }
    }
    return false;
}

NullPointerException 오류를 막기 위한 몇 가지 방법이 있습니다.

첫 번째는 변수에 기본 값을 지정하는 방법입니다.
하지만 언제든 null 값이 들어갈 수 있기 때문에 좋지 않습니다.

두 번째는 변수의 null 값을 미리 체크하는 방법입니다.
이것 또한 멀티 조건이 필요해서 권장하지 않습니다.

if (A != null && A.equals("A")) {
    System.out.println("true");
} else {
    System.out.println("false");
}

세 번째는 리터럴 문자equals 메소드를 호출하는 방법입니다.
간단히 구현이 가능해서 권장하는 방법입니다.

if ("A".equals(A)) {
    System.out.println("true");
} else {
    System.out.println("false");
}

개발을 하면 무의식 중에 변수 - 리터럴 순서로 코딩을 하게 됩니다.
하지만 equals 등 일부 코드에서는 예외가 필요한 경우도 있습니다.

그래서 항상 개발자는 신중한 코딩이 필요합니다.


Tags

#Java#equals#NullPointerExcption#NPE

Related Posts

Java - Record class (불변 데이터 객체 만들기)
June 11, 2024
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media