ResourceBundle의 활용



API 위치
java.util.ResourceBundle

역할
프로그램 배포시 고정된 자원과 변화하는 자원이 있다.
게시판 배포를 예로 든다면 안에 소스는 대부분 고정된 자원이다. 하지만 사용자마다 database의 설정 등은 수정해서 사용해야 하는 부분이다.
이러한 값들은 프로그램의 알고리즘 과 상관없는 부분으로 따로 관리해야 하는 자원들이다. 이러한 자원은 파일로 저장해서 관리하는 것이 보편적은 추세로 ResourceBundle을 이용 할 수 있다.

아래는 현재 사용중인 properties 파일이다.
ADMIN_ID=id
ADMIN_PWD=pass
MAX_UPLOAD_SIZE=6291456

위에서 보면 단순히 "="를 기준으로 해서 왼쪽에 key 오른쪽에 value가 들어가는 단순한 형식임을 볼 수 있다.
#주석
[key]=[value]

주의 할점은 String 형식이라고해서 ",' 이런걸 사용하면 안된다는 것이다.

ResourceBundle 클래스는 자원을 저장하고 반환하는 기능을 제공하는 클래스이다. 이 클래스의 getBundle 메소드는 파일이나 클래스등으로 부터 ResourceBundle 객체를 생성시켜 주어 key값을 통해 해당 value를 얻을 수 있다.

주요 메소드
static ResourceBundle getBundle(String baseName)
: 주어진 값으로 해당 자원을 가지는 ResourceBundle 객체를 만든다.
Object getObject(STring key)
: 키값에 해당되는 객체를 반환한다.
String getString(String key)
: 키값에 해당되는 문자열을 반환한다.

자원 파일
ResourceBundle 클래스는 국제화를 지원하기 위한 클래스로 파일명은 Locale 파일 규칙을 사용한다. 파일의 기본 이름은 "Res"이고, 언어 코드가 "ko", 지역 코드가 "KR"이라면 "Res_ko_KR.properties" 이런식으로 만들며 확장자는 반드시 .properties인 텍스트 파일이어야 한다. 하지만 우리는 국제화에 따라 다양한 언어와 지역을 지원하기 위해 사용하는 것이 아니니 그냥 "Res_성격에 맞는 이름.properties"로 사용하면 되겠다.

자원 파일의 위치
properties 파일은 getBundle 메소드에 의해 객체로 전환이 된다. 따라서 클래스 파일과 같이 위치를 추적하면 되겠다. 만일 "Res_test.properties"라는 파일을 classes 폴더 및에 test라는 폴더 아래 두었다면 우리는 "test.Res_test" 라고 해서 찾아가면 된다.

Res_test.properties
SINCE_YEAR=2002
SINCE_MONTH=5
SINCE_DATE=8
SINCE_DAY=Wednesday

이 파일을 "web-inf/classes/test/" 아래 두고 테스트를 해보겠다.

불러오기 테스트
간단하게 jsp에서 호출을 해보겠다.
resourceBundleTest.jsp
<%@ page contentType="text/html;charset=MS949"%>
<%@ page import!="java.util.ResourceBundle" %>
<%@ page import!="java.util.Enumeration" %>
<%
  ResourceBundle bundle = null;
  try {
       bundle = ResourceBundle.getBundle("test.Res_test");
       Enumeration enum = bundle.getKeys();
       for (; enum.hasMoreElements(); ) {
           String name = (String)enum.nextElement();
           String value = bundle.getString(name);
           out.println(name + " : " + value);
           out.println("<BR>");
       }
  } catch (Exception e) {
       out.println("Err: "+e.toString());
  }
%>

결과
SINCE_YEAR : 2002
SINCE_DATE : 8
SINCE_MONTH : 5
SINCE_DAY : Wednesday

ResourceBundle 클래스는 사용이 너무도 간단하기에 web에서 자주 사용되리라 생각된다.


신고