JaeWon's Devlog
article thumbnail
반응형

개발을 하던 도중에 종종 문자열 유효성 검증(ex: Null 검증)이 필요할 때가 있다.

해당 상황에서 사용하는 메소드를 살펴보고자 한다.


1. String.isEmpty()

- Java에서 제공하는 String 클래스의 isEmpty()메소드가 있다.

- 해당 메소드로 문자열 유효성 검사를 진행이 가능하다.

- 그러나, 해당 메소드로는 Null 체크가 안되어, 로직에서 String이 null 일 경우에는 NullPointerException(NPE)이 발생한다.

- 아래 이미지에서와 같이 length로 길이는 체크하지만 null은 체크하지 않는다.

2. (deprecated)StringUtils.isEmpty()

- 스프링에서 제공하는 Util 클래스 중 StringUtils 클래스에도 isEmpty() 메소드가 있다.
- org.springframework.util.StringUtils 패키지에 위치해 있고, 스프링 3.2 버전부터 사용이 가능하다.

- 해당 메소드로는 Null 체크까지 가능하다.

- 아래 이미지에서와 같이 null을 체크하고, 공백 여부를 체크하여 전달한다.

- 그러나, Spring 5.3 버전부터 해당 메소드가 Deprecated 되었다.

3. StringUtils.hasText() / StringUtils.hasLength()

- StringUtils.isEmpty()가 Deprecated 되면서, 해당 메소드에 친절하게 대체 메소드도 명시해두었다.

- hasText() 또는 hasLength()를 사용하라고 한다.

- 추가로 설명을 번역해보면, String 타입의 경우에는 hasLength 나 hasText 사용을 권장하며, 이외의 Object 타입은 ObjectUtils 의 isEmpty 를 권장한다고 한다.

- 이전에는 StringUtils 로 Object 까지 파라미터를 받고 있었는데, 역할을 명확하게 나누어 검증하고자 하는 것으로 생각된다.

3-1. hasLength()

- 아래 이미지에서와 같이, null 체크 후 String 클래스의 isEmpty 를 호출하여 길이까지 체크하여 판별한다.

- String 클래스의 isEmpty 에서 NPE이 발생하는 것을 추가하여 결과를 전달해준다.

- 위 설명을 번역해보면, 공백만 있는 문자열(ex : "    ")에 대해서도 정상적으로 true 가 반환되는 점은 유의해야 한다.

- 결론적으로, 해당 메소드는 null 체크 및 길이가 1 이상인지 확인할 때 사용한다.

3-2. hasText()

- 아래 이미지에서와 같이, hasLength() 에 추가로 공백이 아닌 문자열까지 검증을 해준다.

- null 체크 후, String 클래스의 isEmpty 를 호출하여 길이를 체크하고, 공백이 아닌 문자가 포함되어 있는지 체크하여 판별한다.

- contatinsText() 는 문자열을 하나씩 순회하며 공백이 아닌 character 가 1개 이상 포함되면 true 를 리턴한다.

- 문자열 유효성 검사를 할 떄 해당 메소드를 사용하면 된다.

- 사용시 주의할 점이 있는데 기존 null 체크 시 결과가 반대로 전달된다.

StringUtils.isEmpty(null); ==> true
StringUtils.hasText(null); ==> false
기존 StringUtils.isEmpty 를 hasText 로 리팩토링 하는 과정에서는 필히 결과가 반대로 되는 것을 생각하여 수정해야 한다.
ex) StringUitls.isEmpty(null) == !StringUitls.hasText(null)

4. ObjectUtils.isEmpty()

- 문자열 이외에 Object(ex: Map, Array 등)에서도 유효성을 확인할 때 사용한다.

- null 체크를 하고, 검증대상이 Optional 인지, Map 인지, Array 인지 확인하여 각 타입에 맞는 isEmpty 메소드를 호출하여 결과를 전달한다.


참고

- https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/util/StringUtils.html

- https://creampuffy.tistory.com/120

반응형
profile

JaeWon's Devlog

@Wonol

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!