티스토리 뷰

개요

Java 진영에는 많은 텍스트 템플릿 엔진이 존재한다. 대표적으로 FreeMarker가 있다. 강력하지만 간단한 텍스트 템플릿을 처리하기에는 무겁다. 닭 잡는데 소 잡는 칼을 사용하는 격이다. 짧고 단순한 텍스트 템플릿을 처리하기에는 Apache Commons Lang이 제공하는 StrSubstitutor가 적당하다. 이번 글에서는 이를 이용하여 간단한 텍스트 템플릿을 처리하는 방법을 소개하고자 한다.

라이브러리 종속성 추가

/build.gradle 파일에 아래와 같이 라이브러리를 추가한다.

dependencies {
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.4'
    compile group: 'com.google.guava', name: 'guava', version: '19.0'
}
  • StrSubstitutorApache Commons Lang에 속하기 때문에 해당 의존성을 추가한다.
  • Google Guava는 옵션이다. 소스 코드의 가독성을 위해 ImmutableMap을 사용할 수 있다. 자세한 예는 아래를 참고한다.

템플릿 적용하기

StrSubstitutor의 템플릿 기능을 적용하는 방법은 아래와 같이 매우 간단하다.

// 가장 일반적이고 원시적인 방법, 소스 코드 가독성이 떨어지며 추후 유지보수가 힘들다.
String boardId = "forum";
int postId = 65535;
String output = "/boards/" + boardId + "/posts/" + postId;

// StrSubstitutor의 템플릿 기능을 이용한 방법, 추후 유지보수가 편리하지만 소스 코드 가독성은 여전히 떨어진다.
String template = "/boards/${boardId}/posts/${postId}";
Map<String, Object> valueMap = new HashMap<String, Object>();
valueMap.put("boardId", "forum");
valueMap.put("postId", 65535);
String output = StrSubstitutor.replace(template, valueMap);

// Guava의 ImmutableMap을 이용하면 소스 코드 가독성이 좋아진다. 이 방법을 추천한다.
String template = "/boards/${boardId}/posts/${postId}";
String output = StrSubstitutor.replace(template, ImmutableMap.of("boardId", "forum", "postId", 65535));

참고 글

댓글
댓글쓰기 폼