다른 외부업체와 프로젝트를 하다 보면 외부업체로부터 받아오는 데이터가 null값인지 아닌지 알 수 없을 때가 있다. 물론 조율을 통해 해당 데이터는 값이 필수로 들어있다거나 null값이면 0이나 다른 문자로 대체해서 받아 올 수도 있지만 예상치 못하는 상황이 발생해서 에러가 발생할 수도 있기 때문에 항상 개발자는 null처리를 생각하고 개발을 해야 한다.
null은 공백도 아니고 0도 아닌 정의되지 않은 값이라고 할 수 있다.
1. null 및 공백 처리
먼저 매개변수로 들어오는 String
데이터가 null인지 비어있는 변수인지를 확인할 때에는 org.apache.commons.lang3.StringUtils
클래스를 사용한다.
StringUtils
에는 대부분의 문자열 처리를 수행할 수 있는 매소드들이 존재한다.
그중에서 우리가 사용할 매소드는
isBlank
, isEmpty
, isNotBlank
, isNotEmpty
이렇게 4개이다.
매소드들의 사용방법은 해당 매소드 설명을 보면 자세히 알 수 있다.
두 개를 비교해보면 blank
는 공백을 true
, 즉 값이 없다고 판단하는 반면
empty
는 공백을 false
로 처리한다.
만약 공백도 null
과 똑같이 처리하고 싶다면 blank
를 사용하면 된다.
아래는 위 매소드와 반대인 매소드 설명이다.
상황에 따라서 매소드를 사용하면 된다.
2. 특정 값 비교
특정 값을 비교할 때는 아래처럼 하면 NullPointException
을 예방할 수 있다.
if("A".equals(code)){
.....
}else if("B".equals(code)){
.....
}else{
.....
}
3. HashMap으로 들어온 데이터
데이터를 받을 때 json
으로 데이터를 받으면 java에서 HashMap
으로 바꿔서 사용을 했었다.
이때 String으로 들어온 데이터는 String으로 형 변환해서 사용하면 된다.
여기까지는 문제가 없지만 이번 프로젝트를 하면서 String으로 들어온 데이터(lon, lat)를 Double
로 받아야 할 때가 있었다.
이때 NaN
이라는 문자열이 들어오면 Double
로 형변환할 때 에러도 안나고 그대로 지나가서 연산을 할때 NaN으로 나오는 문제가 있었다.
그래서 아래와 같이 isNaN
이라는 매소드를 사용해서 NaN일 때는
그냥 넘어가게 처리를 했다.
...
Double lon = Double.parseDouble(data.get("longitude").toString());
Double lat = Double.parseDouble(data.get("latitude").toString());
if(lon.isNaN() || lat.isNaN()) {
continue;
}
...
isNaN
매소드는 Double(대문자 주의)
클래스의 매소드이므로 형 변환을 할 때 Double
로 해줘야 한다.
찾아보니까 JAVA 8에 Optional을 사용하여 Null 처리하는 방법을 많이 사용하는 것 같다.
지금 회사에서는 처음부터 StringUtils를 많이 사용해서 익숙해졌는데
나중에 시간이 된다면 JAVA 8의 Optional도 사용해보고 싶다!!
'Backend > JAVA' 카테고리의 다른 글
객체지향 5원칙 (SOLID) (0) | 2021.07.28 |
---|---|
객체지향 프로그래밍(OOP) (0) | 2021.07.27 |
JAVA JWT payload 가져오는 방법 / 만료시간 체크 (0) | 2021.06.09 |
[Tibero/Geometry 에러 처리] Data is too long for the column 에러/ tbClob/tbBlob 처리 방법(feat. GIS) (0) | 2021.05.13 |
JAVA / JVM / JDK / JRE에 대해서 (0) | 2021.05.04 |