구아바(Guava) Joiner 클래스란?
구글에서 제공하는 오픈소스 라이브러리인 구아바(Guava)에는 Joiner라는 유틸리티 클래스가 포함되어 있습니다. 이 클래스는 문자열, 객체, 컬렉션 등을 특정 구분자(delimiter)로 손쉽게 연결할 수 있는 다양한 메서드를 제공합니다.
특히 Joiner를 사용하면 배열이나 리스트에 null 값이 포함되어 있어도 안전하게 처리할 수 있다는 점이 큰 장점입니다. 일반적인 String.join() 방식과 달리, null 값을 건너뛰거나 다른 문자열로 대체하는 유연한 처리가 가능합니다.
예제 코드
다음 예제에서는 null 값을 포함한 문자열 배열을 '+' 구분자로 연결하는 과정을 보여줍니다.
import com.google.common.base.Joiner;
import java.util.*;
public class Demo {
public static void main(String[] args) {
String[] my_arr = { "hel", null, "lo", "wo", "r", null, "ld" };
System.out.println("원본 배열 : " + Arrays.toString(my_arr));
String my_result = Joiner.on('+').skipNulls().join(my_arr);
System.out.println("연결된 문자열 : " + my_result);
}
}실행 결과
원본 배열 : [hel, null, lo, wo, r, null, ld] 연결된 문자열 : hel+lo+wo+r+ld
코드 설명
Demo라는 이름의 클래스 내부에 메인(main) 함수가 정의되어 있으며, 여기서 하나의 문자열 배열을 선언합니다. 이 배열에는 일반 문자열 요소와 함께 null 값 두 개가 섞여 있습니다.
핵심은 Joiner.on('+') 부분입니다. 이 코드는 구분자를 '+'로 지정하여 Joiner 인스턴스를 생성하고, skipNulls() 메서드를 호출해 null 값을 무시하도록 설정합니다. 마지막으로 join(my_arr)를 호출하면 null이 제거된 상태로 나머지 문자열들이 '+'로 연결됩니다.
그 결과, 원본 배열의 null 값들은 모두 제거되고 hel+lo+wo+r+ld라는 깔끔한 문자열이 콘솔에 출력됩니다.
Joiner 클래스의 주요 메서드
on(char/String): 구분자를 지정하여 Joiner 인스턴스를 생성합니다.skipNulls(): 연결 과정에서 null 값을 건너뜁니다.useForNull(String): null 값을 지정한 문자열로 대체합니다. (단, skipNulls()와 함께 사용할 수 없습니다.)join(Iterable/Iterator/Object...): 리스트, 배열 등 다양한 형태의 데이터를 연결합니다.withKeyValueSeparator(): Map 객체를 key=value 형태로 연결할 때 사용합니다.
마무리
이처럼 구아바의 Joiner 클래스는 복잡한 반복문 없이도 한 줄의 코드로 문자열 연결 작업을 처리할 수 있게 해주며, null 처리까지 우아하게 해결해 줍니다. 실무에서 로그 생성, CSV 데이터 조합, 동적 쿼리 문자열 작성 등 다양한 상황에서 유용하게 활용할 수 있습니다.