문제 이슈
Batch 프로그램을 개발하다가, 수동으로 Batch 실행 시, 파라미터를 입력받아 분기처리하는 로직이 있다.
자동으로 Batch 실행 시, 해당 파라미터에는 Null 값이 들어와서 해당 파라미터를 분기하는 로직에서 NullPointerException이 발생하였다.
문제 원인
String agencyId = null; 일 때,
if(agnecyId.equals("ALL"))
이라는 구문이 존재였다.
equals()함수를 사용할 때, null을 비교하면 NullPointerException이 발생하기 때문에 반드시 문자열이 앞으로 와야한다.
기본이지만, 지키지 못하면 아주 치명적인 실수가 될 수 있다.
String str1 = "test";
String str2 = "test";
boolean result = str1.equals(str2); // true
String str3 = null;
boolean result2 = str3.equals(str1); // NullPointerException 발생
문제 해결
1) 문자열과 파라미터 변수를 비교하기
if("ALL".equals(agencyId))
문자열 - 파라미터 변수 순으로 비교하면 NullPointerException이 발생하지 않는다.
문자열과 파라미터 변수 간 순서를 상관하고 싶지 않다면 2) 번 방법을 사용하면 된다.
2) StringUtils.equals
StringUtils.equals는 Apache Commons Lang 라이브러리에 포함된 유틸리티 메서드이다.
- 동작 방식 : 두 문자열이 동일한지 비교하여, 하나 또는 두 개의 문자열이 Null인 경우에도 안전하게 비교
- Null Safe : Null 값을 안전하게 처리한다. 두 인수가 모두 null이면 true 리턴, 하나만 null이면 false 리턴
String str1 = "test";
String str2 = "test";
boolean result = StringUtils.equals(str1, str2); // true
String str3 = null;
boolean result2 = StringUtils.equals(str3, str1); // false
boolean result3 = StringUtils.equals(str3, null); // true
차이점
- null 안전성
- String.equals는 호출 객체가 null이면 NullPointerException 발생
- StringUtils.equals는 null 값을 안전하게 처리하여 예외를 방지한다
요약
- String.equals는 기본적으로 Java에서 제공하는 문자열 비교 메서드로, 호출 객체가 null이면 예외 발생
- StringUtils.equals는 Apache Commons Lang 라이브러리 메서드로 null 값에 대해 안전하게 비교 수행
문제 이슈
Batch 프로그램을 개발하다가, 수동으로 Batch 실행 시, 파라미터를 입력받아 분기처리하는 로직이 있다.
자동으로 Batch 실행 시, 해당 파라미터에는 Null 값이 들어와서 해당 파라미터를 분기하는 로직에서 NullPointerException이 발생하였다.
문제 원인
String agencyId = null; 일 때,
if(agnecyId.equals("ALL"))
이라는 구문이 존재였다.
equals()함수를 사용할 때, null을 비교하면 NullPointerException이 발생하기 때문에 반드시 문자열이 앞으로 와야한다.
기본이지만, 지키지 못하면 아주 치명적인 실수가 될 수 있다.
String str1 = "test";
String str2 = "test";
boolean result = str1.equals(str2); // true
String str3 = null;
boolean result2 = str3.equals(str1); // NullPointerException 발생
문제 해결
1) 문자열과 파라미터 변수를 비교하기
if("ALL".equals(agencyId))
문자열 - 파라미터 변수 순으로 비교하면 NullPointerException이 발생하지 않는다.
문자열과 파라미터 변수 간 순서를 상관하고 싶지 않다면 2) 번 방법을 사용하면 된다.
2) StringUtils.equals
StringUtils.equals는 Apache Commons Lang 라이브러리에 포함된 유틸리티 메서드이다.
- 동작 방식 : 두 문자열이 동일한지 비교하여, 하나 또는 두 개의 문자열이 Null인 경우에도 안전하게 비교
- Null Safe : Null 값을 안전하게 처리한다. 두 인수가 모두 null이면 true 리턴, 하나만 null이면 false 리턴
String str1 = "test";
String str2 = "test";
boolean result = StringUtils.equals(str1, str2); // true
String str3 = null;
boolean result2 = StringUtils.equals(str3, str1); // false
boolean result3 = StringUtils.equals(str3, null); // true
차이점
- null 안전성
- String.equals는 호출 객체가 null이면 NullPointerException 발생
- StringUtils.equals는 null 값을 안전하게 처리하여 예외를 방지한다
요약
- String.equals는 기본적으로 Java에서 제공하는 문자열 비교 메서드로, 호출 객체가 null이면 예외 발생
- StringUtils.equals는 Apache Commons Lang 라이브러리 메서드로 null 값에 대해 안전하게 비교 수행