9월 04, 2023

StringUtils.equals 사용이유, string equals() 메서드와 다른점

자바에서는 String의 동일 여부를 체크할 때 

String의 equals() 메서드를 쓴다는 사실은 자바를 처음 배운 사람들도 모두 아는 사실일 것이다. 


다만 가끔 코드를 보다 보면 StringUtils.equals(str1, str2) 의 형태로 String의 동일여부를 체크하는 것인데도 String의 equals() 메서드를 사용하지 않고 StringUtils.equals() 를 사용하는 것을 볼 수 있을 것이다. 


이유는 바로 NullPointerException를 방지하는 데 있다고 할 수 있다. 

Null Pointer의 개념을 처음 만든 Tony Hoare의 "10억 달러 짜리 실수" 라는 유명한 발언만 보더라도 얼마나 개발자들이 NullPointerException을 막기 위해서 노력하고 있는지를 알 수 있을 것이다. 


다시 본론으로 돌아가서 


String str1과 String str2를 비교할 때 

str1.equals(str2) 라는 자바 line 중 str1이 null이면 NullPointerException이 발생한다. 반면 str1이 null이 아니고 str2가 null이면 NullPointerException이 발생하지 않는다. 


따라서 null 값이 확실히 아닌 str2를 인자 자리에 가급적 쓰라고 말을 하지만 그러다가 확실하다고 생각했던 str1의 값이 null로 들어오면 바로 NullPointerException이 발생하는 것이다. 


따라서 이러한 위험을 막기 위해 개발자들은 if 문 분기를 통해 null 이 아닐 때만 비교를 하기도 하는데, 또 다른 방법으로는 아예 StringUtils.equals를 사용하는 것이다. 


StringUtils를 사용하기 위해서는 

 import org.apache.commons.lang.StringUtils ; 

를 통해 먼저 import를 해주고 

 StringUtils.equals(str1, str2)  이런 식으로 사용해주면 비교가 가능하다. 


둘 중 하나가 null이어도 Exception을 뱉지 않아 더욱 안전하다고 볼 수 있다.