Properties

java.util.Properties 클래스는 자바에서 설정 값(파라미터)을 코드 외부로 분리하기 위해 사용한다.

.properties 파일

프로퍼티 파일의 확장자는 무엇이 되든 상관 없지만 주로 .properties를 사용한다. 프로퍼티 파일의 각 라인은 하나의 프로퍼티를 정의한다.

프로퍼티는 다음과 같은 형식으로 정의한다. 이때, 따옴표(")와 작은 따옴표(')는 값의 일부로 처리된다.

key=value
key = value
key : value
key value

주석은 #이나 !로 시작한다.

# Sharp Comment
key1=value1
! Bang comment
key2=value2

값을 여러줄에 걸쳐 입력하고 싶을 때는 \를 사용한다. 다음 예제에서 Wikipedia 앞의 공백은 모두 제거되고 messageWelcome to Wikipedia 값을 갖는다.

message = Welcome to \
          Wikipedia!

예제

다음과 같은 프로퍼티 파일이 있을 경우

# example.properties
message = Hello!

Properties.load() 메소드로 프로퍼티 파일을 읽고, Properties.getProperty() 메소드로 값을 조회한다.

Properties props = new Properties();
props.load(ClassLoader.getSystemResourceAsStream("example.properties"));
// message를 조회하고 값이 없을 경우 null을 리턴한다.
String message = props.getProperty("message");
// name을 조회하고 값이 없을 경우 alex를 기본값으로 사용한다.
String name = props.getProperty("name", "alex");
// city는 null 이다.
String city = props.getProperty("city");

인코딩

프로퍼티 파일의 인코딩은 ISO-8859-1이다. 한글은 유니코드 문자열을 escape한 뒤 입력해야 한다. 다음 예제에서 message안녕하세요 값을 갖는다.

message=\uc548\ub155\ud558\uc138\uc694

IntelliJ를 사용하는 경우 Settings > Editor > File Encodings 메뉴에서 Properties Files 항목의 Transparent native-to-ascii conversion 을 체크해주면 한글을 자동으로 이스케이프된 유니코드 문자열로 변환해서 입력하거나 보여준다.

XML 파일

Java 1.5부터 도입된 XML 포맷을 사용해서 유니코드 이스케이프 문자를 사용하지 않고 프로퍼티 파일을 정의할 수 있다.

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>XML Format</comment>
    <entry key="message">안녕하세요</entry>
</properties>

Java 9

Java 9부터는 프로퍼티 파일의 기본 인코딩이 UTF-8이다. 프로퍼티 파일을 읽을 때 UTF-8을 적용할 수 없을 경우 ISO-8859-1을 사용한다.

참고