JSTL <fmt:parseNumber> 태그란?
JSP에서 문자열 형태의 숫자, 퍼센트, 통화 값을 실제 수치 데이터로 변환해야 할 때가 있습니다. 이럴 때 사용하는 것이 바로 JSTL의 <fmt:parseNumber> 태그입니다. 이 태그는 지정된 형식에 맞는 문자열을 해석(parse)하여 프로그램에서 사용할 수 있는 숫자 값으로 변환해 줍니다.
주요 속성
<fmt:parseNumber> 태그에서 사용할 수 있는 주요 속성은 다음과 같습니다.
| 속성 | 설명 | 필수 여부 | 기본값 |
|---|---|---|---|
| value | 읽어 들일(구문 분석할) 숫자 값 | 아니오 | 태그 본문(body) |
| type | NUMBER(숫자), CURRENCY(통화), PERCENT(퍼센트) 중 하나 | 아니오 | number |
| parseLocale | 숫자를 구문 분석할 때 사용할 로케일(locale) | 아니오 | 기본 로케일 |
| integerOnly | true이면 정수 부분만 구문 분석하고, false이면 부동소수점 숫자까지 분석 | 아니오 | false |
| pattern | 사용자 정의 구문 분석 패턴 | 아니오 | 없음 |
| timeZone | 표시되는 날짜의 시간대 | 아니오 | 기본 시간대 |
| var | 구문 분석된 숫자를 저장할 변수의 이름 | 아니오 | 페이지에 직접 출력 |
| scope | 변수를 저장할 범위(scope) | 아니오 | page |
pattern 속성의 역할
pattern 속성은 <fmt:formatNumber> 태그의 pattern 속성과 동일한 방식으로 작동합니다. 다만 차이점이 있다면, 출력 시에는 숫자를 어떤 형식으로 보여줄지 결정하는 반면, 구문 분석 시에는 파서가 어떤 형식의 입력을 기대해야 하는지를 알려준다는 점입니다. 예를 들어 "#,##0.00" 같은 패턴을 지정하면 콤마가 포함된 숫자 문자열도 정확하게 해석할 수 있습니다.
사용 예제
다음 예제는 소수점이 포함된 숫자 문자열을 구문 분석하는 기본적인 방법과, integerOnly 속성을 사용해 정수 부분만 추출하는 방법을 보여줍니다.
<%@ taglib prefix = "c" uri = "https://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix = "fmt" uri = "https://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>JSTL fmt:parseNumber Tag</title>
</head>
<body>
<h3>Number Parsing:</h3>
<c:set var = "balance" value = "1250003.350" />
<fmt:parseNumber var = "i" type = "number" value = "${balance}" />
<p>Parsed Number (1) : <c:out value = "${i}" /></p>
<fmt:parseNumber var = "i" integerOnly = "true"
type = "number" value = "${balance}" />
<p>Parsed Number (2) : <c:out value = "${i}" /></p>
</body>
</html>먼저 <c:set> 태그로 변수 balance에 "1250003.350"이라는 문자열을 저장한 뒤, 두 가지 방식으로 구문 분석을 수행합니다. 첫 번째는 전체 숫자를 그대로 분석하는 경우이고, 두 번째는 integerOnly 속성을 true로 설정하여 소수점 아래를 버리고 정수만 가져오는 경우입니다.
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Number Parsing: Parsed Number (1) : 1250003.35 Parsed Number (2) : 1250003
정리
<fmt:parseNumber> 태그를 활용하면 화면이나 외부 소스에서 넘어온 형식화된 숫자 문자열을 손쉽게 수치 값으로 변환할 수 있습니다. 특히 type 속성으로 통화나 퍼센트 형식을 처리하고, integerOnly와 pattern 속성을 조합하면 다양한 상황에 유연하게 대응할 수 있습니다.