본문 바로가기
Web Programming/Java

[JAVA/SPRING] 방어적 코딩 하기 (NPE(NullPointerException)피하는 방법)

by jaey0ng 2023. 4. 4.

NullPointerException 이하 NPE를 피하기 위한 방법은 여러가지가 있습니다.

코딩습관이 잘 되어 있다면 보지 않을 에러지만

약간의 미숙이 에러를 만드는 것 같습니다.

 

설명하기 앞서 

SI 에서는 사용하지 말라고 하는 기업도 있을 겁니다.

그럴 땐 아래 방법이 아닌 코딩한 것을 수정하시면 되겠습니다.

 

순서

1. 문자열 비교는 equals 를 사용하자

2. 숫자 비교는 수치를 앞에 쓰자

3. toString() → valueOf() 를 사용하자


1. 문자열 비교는 equals 를 사용하자

public static void main(String[] args) {
	String a = new String("exam");

	if (a == "exam") {
		System.out.println("true");
	} else {
		System.out.println("false"); // false 출력
	}

	if (a.equals("exam")) {
		System.out.println("true"); // true 출력
	} else {
		System.out.println("false");
	}
}

하지만 실무에선 이렇게 코딩을 하지 않고 보통 a = null; 이라는 걸로 변수 선언합니다.

NPE 예시입니다.

public static void main(String[] args) {

	String a = null;

	if (a == "exam") {
		System.out.println("true");
	} else {
		System.out.println("false"); // False 출력
	}

	if (a.equals("exam")) { // java.lang.NullPointerException: null 출력
		System.out.println("true");
	} else {
		System.out.println("false");
	}
}

 

2. 숫자 비교는 수치를 앞에 쓰자

Dataset a = new Dataset();

if (a.getDataList().size() > 0) {
	~~
}

이렇게 쓰는 코드를

Dataset a = new Dataset();

if (0 < a.getDataList().size()) {
	~~
}

이렇게 위치만 바꿔줘도 수정하기 수월할 것입니다.

이 코드는 에러를 직접적으로 해결하기 보단 이유가 무엇인지 알 수 있습니다.

 

3. toString() → valueOf() 를 사용하자

if (~~.equals(data.get(~~).toString())) {
	~~
}

위처럼 쓸 수도 있지만

if (String.valueOf(~~.equals(data.get(~~)))) {
	~~
}

로 코딩을 하면 NPE를 직접적으로 피할 수 있게됩니다.