가희의자기개발블로그

Properties 객체 본문

카테고리 없음

Properties 객체

가희gahui 2020. 7. 20. 19:15
반응형

프로그래밍을 할때, 설정정보를 하드코드하는 경우는 드물다. 대신, 설정정보를 소스코드 영역의 외부에 저장함으로서 시스템 설정이 변경되었을 때, 시스템을 재 컴파일 하는 것을 막는다. 자바플랫폼의 경우 이러한 프로그램 설정은 전형적으로 Properties 파일에 저장하는데, 물론 자신이 직접 코드를 짤 수 있지만 java.util.Properties클래스를 이용하면, 프로그램의 설정정보를 쉽게 개발코드에 불러오거나 또는 설정정보에 새로운 정보를 추가, 저장 할 수 있다.

 

이 프로퍼티 파일은 일련의 키-값의 쌍들로 이루어지며 파일에 저장된다. 파일의 이름은 .properties로 끝난다. 

예를 들어 2라인은 두 개의 프로퍼티들을 가진 프로퍼티파일을 나타낸다.  첫번째 /member/modifyForm.do 프로퍼티는 member.service.ModifyFormService를 가진다. 아래 코드 또한 마찬가지다.

/member/modifyForm.do = member.service.ModifyFormService
/member/modify.do = member.service.ModifyService

Properties클래스는 기본적으로 지속적인 해시테이블을 제공하며 그곳에서 모든 키와 값들은 String형태 이다. 잠시 데이터를 가져오는 부분을 무시하고 키-값에 접근하는 것은 Hashtable에서의 작용하는것과 유사하게 동작한다. 이유는 Properties 클래스는 해시 클래스의 서브 클래스 이기 때문이다. 

String value = (String)aPropertiesObject.get("hello");
  System.out.println("Value of hello is: " + value);

 get메소드의 결과 값을 String으로 캐스팅한 것을 볼 수 있다. Properties클래스는 단지 String과 작용하도록 의도되어졌기 때문에, 이 객체는 특별한 get과 put 메소드를 제공한다. 바로 getProperty()와 setProperty 메소드로 특정한 프로퍼티에 대한 값을 요청할 수 있으며 일반적으로 getProperty(key,default) 으로 동일하게 작용하지만 key값만 파라미터로 넣어줄 경오 Default값이 반환된다. HashTable에서 상속 받은 get메소드와 같이 Object를 반환하는 대신 getProperty()는 String객체를 반환한다. 

 

Properties의 셋팅을 불러오는 메소드는 load()이다. 단지 InputStream에 Properties파일을 넣어서 그 스트림으로 부터 프로퍼티들을 읽어온다. 이 Properties객체들은  String으로 이루어진 키와 값을 갖도록 되어있지만, 이 load메소드는 Reader객체가 아닌, InputStream객체를 받아들인다. 

FileInputStream fin = null;
		Properties properties = new Properties();

		try {
			fin = new FileInputStream(propertyConfig);
			properties.load(fin);
			System.out.println("properties = " + properties);

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fin.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

대게 이런식으로 코딩되어진다. 

InputStream은 전형적인 하나의 FileInputStream이다. 만약 웹 애플리케이션을 JAR파일로 묶었다면, FileInputStream 대신 InputStream은 Jar파일로부터 불러들여야 한다. 이런경우 아래와 같이 ClassLoader에게 그 Stream을 요청해야 한다.

InputStream is =
    this.getClass().getClassLoader().getResourceAsStream(
                                         "foo.properties");

이건 현재 실행되어지는 클래스와 같은 디렉토리에서 foo.properties 파일을 찾는다. 

 

properties에 저장되어 있는 정보 중 key값만을 출력하기 위해서는 상속받고 있는 HashTable클래스의 keySet()메서드를 이용하면 된다. 이는 key값을 Set형태로 출력한다. 

반응형
Comments