본문 바로가기
Java

[Java; 자바] StringUtils / isBlank / isEmpty / org.apache.commons.lang3 / 공백 체크 / null 체크

by daddydontsleep 2024. 1. 4.
728x90
728x90

사진: Unsplash 의 Raoul Droog

StringUtils 란?

https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html

 

StringUtils (Apache Commons Lang 3.14.0 API)

Splits a String by Character type as returned by java.lang.Character.getType(char). Groups of contiguous characters of the same type are returned as complete tokens, with the following exception: the character of type Character.UPPERCASE_LETTER, if any, im

commons.apache.org

우선 공식 문서부터 보고 가겠습니다. 사실 가장 잘 설명된 곳입니다.
StringUtils 클래스는 Apache Commons Lang 라이브러리에서 제공하는 유틸리티 클래스 중 하나입니다.
이 클래스는 문자열 조작을 위한 다양한 메서드를 제공하여 Java 프로그래밍을 보다 편리하게 만들어줍니다.

간단하게 StringUtils 클래스의 몇 가지 주요 기능에 대해 설명하겠습니다.

  1. 문자열 조작 : 문자열 자르기, 합치기(결합), 검색, 대소문자 변환 등과 같은 문자열 조작을 위한 메서드를 제공합니다. 예를 들어, StringUtils.substring() 메서드는 문자열의 일부를 추출하고, StringUtils.join() 메서드는 여러 문자열을 결합합니다.
  2. 공백 처리 : 문자열의 앞뒤 공백을 제거하거나, 여러 개의 공백을 단일 공백으로 변환하는 등의 공백 처리를 위한 메서드를 제공합니다. 예를 들어, StringUtils.trim() 메서드는 문자열의 앞 뒤 공백을 제거합니다.
  3. 문자열 검사 : 문자열이 비어 있는지, 공백인지, 숫자로 이루어져 있는지 등을 확인하는 메서드를 제공합니다. 예를 들어, StringUtils.isEmpty() 메서드는 문자열이 비어 있는지 확인합니다. (우리가 지금 이 블로그를 보고 있는 이유 중 하나이다.)
  4. 문자열 치환 : 문자열 내에서 특정 패턴을 찾아 다른 문자열로 치환하는 메서드를 제공합니다. 예를 들어, StringUtils.replace() 메서드는 문자열 내에서 특정 문자열을 다른 문자열로 바꿉니다.

이렇게 문자열 조작, 공백 처리, 문자열 검사, 문자열 치환 등 여러 가지 상황에 맞게 다양한 메서드를 제공해 주는 StringUtils는 현업에서도 자주 사용합니다.

isBlank vs isEmpty

이름만 들어서는 둘다 문자열이 비어있는지 확인(검사)하는 메서드입니다. 그러나 그 속을 열어보면 아주 큰 차이가 납니다.

먼저 `isBlank` 부터 까보겠습니다.

    public static boolean isBlank(CharSequence cs) {
        int strLen = length(cs);
        if (strLen == 0) {
            return true;
        } else {
            for(int i = 0; i < strLen; ++i) {
                if (!Character.isWhitespace(cs.charAt(i))) {
                    return false;
                }
            }

            return true;
        }
    }

`isBlank`는 문자열의 길이뿐만 아니라 주어진 문자열이 공백으로만 이루어져 있지 확인하는 데 사용합니다.

다음은 `isEmpty`입니다.

    public static boolean isEmpty(CharSequence cs) {
        return cs == null || cs.length() == 0;
    }

`isEmpty`는 주어진 문자열의 길이를 가지고 문자열이 비어 있는지 확인을 합니다.

보시다시피 isBlank()는 isEmpty()에 비해 좀 더 포괄적인 개념으로 문자열이 비어있는지 확인합니다.

예시를 통해 더 확실히 알아보고 글을 마치겠습니다.

다음은 공식 문서에 나와있는 예시입니다.

isBlank

 // true  : 비어있음
 // false : 비어있지 않음
 StringUtils.isBlank(null)      // true
 StringUtils.isBlank("")        // true
 StringUtils.isBlank(" ")       // true
 StringUtils.isBlank("bob")     // false
 StringUtils.isBlank("  bob  ") // false

isEmpty

 // true  : 비어있음
 // false : 비어있지 않음
 StringUtils.isEmpty(null)      // true
 StringUtils.isEmpty("")        // true
 StringUtils.isEmpty(" ")       // false
 StringUtils.isEmpty("bob")     // false
 StringUtils.isEmpty("  bob  ") // false

회원가입 예제

gradle

implementation 'org.apache.commons:commons-lang3:3.12.0'

maven

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

버전은 자신에게 맞게 수정해서 사용하세요.

회원가입 예제 코드

import org.apache.commons.lang3.StringUtils;

import 문구도 같이 넣어드립니다.

	@Override
	public MemberDto signUp(SignUpDto signUpDto) {
		Member member = memberRepository.findByUsername(signUpDto.getUsername()).orElse(null);

		if (StringUtils.isBlank(signUpDto.getUsername())) {
			throw new IllegalArgumentException("사용자 이름을 입력해주세요.");
		} else if (StringUtils.isBlank(signUpDto.getPassword())) {
			throw new IllegalArgumentException("비밀번호를 입력해주세요.");
		} else if (StringUtils.isBlank(signUpDto.getNickname())) {
			throw new IllegalArgumentException("닉네임을 입력해주세요.");
		} else if (member != null) {
			throw new IllegalArgumentException("이미 사용 중인 사용자 이름입니다.");
		}

		String encodedPassword = passwordEncoder.encode(signUpDto.getPassword());
		Set<Authority> authorities = new HashSet<>();
		authorities.add(Authority.builder().authorityName("ROLE_USER").build());
		return MemberDto.of(memberRepository.save(signUpDto.toEntity(encodedPassword, authorities)));
	}

끝.

728x90
300x250