본문 바로가기

Spring

[Error] java equals 사용 시 NPE 해결하는 습관

isDeleted field에, "Y", "N", null 값만 들어올 수 있도록 지정했기 때문에, NPE가 생기는 것이 이상해서 debugging을 진행하였다. 문제는, isDeleted field의 값을 체크하는 것을 null부터 하지 않았던 것이였다. null일 경우에, 이미 앞에서 equals 메소드를 진행할 때 NPE가 나버리기 때문이다.

 

앞에서부터 차례로 조건을 확인한다는 것을 기억하자. 코딩테스트에서도 비슷한 경우가 있다. plain에 대한 bfs를 진행할 때, plain의 범위 안에 들어있는지 확인한 후 방문 여부를 확인한다(0<=ny<n, 0<=nx<n, visit[ny][nx] ). 범위 안에 들어있지 않으면 visit[ny][nx]가 OutOfIndex 에러가 발생하기 때문이다.

 

..라고 생각했는데, 똑같이 NPE가 발생했다. 

 

and 연산이 아니라 or 연산이기 때문에, 모든 연산을 다 진행한다. 그렇기 때문에 isDeleted.equals("Y") 연산 자체를 바꾸어야 하는데, 2가지 방법이 있다.

 

1. null 체크 선행하기

- 이건 간단하다. equals에 들어오는 문자열 자체를 앞에서 null체킹을 하고 null이 아닌 것에 대해서만 체킹하는 것이다.

 

2. equals를 사용하는 대상 문자열 바꾸기

- "Y".equals(isDeleted) 처럼, 대상 문자열을 바꾸는 것이다. "Y"는 null일 수가 없기 때문이다.

- 이게 보기도 좋고 편한 것 같다.