간단히 말해 레지스트리는 운영체제와 프로그램에서 필요한 정보를 담고 있는 데이터베이스와 비슷하다고 할 수 있다. 일반적인 윈도우 프로그램들은 레지스트리에 접근 할 수 있지만 자바 프로그램에서는 접근 할 수 없었다. 그 이유는 "자바의 철학"에 위배 되기 때문일 것이다. 자바 프로그램은 모든 운영체제에서 실행 가능 해야 하는데 "윈도우에만 존재하는 레지스트리"라는 것을 지원하지 않는 것은 당연한 일이었다. 게다가 레지스트리는 잘못 건드리면 윈도우 자체가 폭탄처럼 변할 수 도 있기 때문에 상당히 조심스러울 수 밖에 없다.
Registry; 레지스트리
레지스트리는 윈도우95 나 윈도우98 및 윈도우NT와 같은 운영체계에서, 부팅시 필요한 정보, 즉 어떤 하드웨어가 장착되어 있는지, 시스템사양이나 선택사항은 무엇인지, 메모리는 어떻게 설정되어 있는지 등을 한 곳에 저장하기 위한 장소이다. 레지스트리는 이전의 윈도우 시스템, 즉 윈도우3.1 에서 사용되던 환경설정 파일(.INI 파일)과 유사하며, 그것을 대치한 것으로 이해하면 된다. 그러나 이전 시스템에서 운영되던 16 비트 응용프로그램들과 호환성을 위해 환경설정 파일(.INI 파일)도 여전히 함께 제공된다. 사용자는 Tweak UI와 같은 제어판 도구를 사용하여 레지스트리를 간접적으로 수정할 수 있으며, 응용프로그램이 설치되거나 삭제될 때마다 레지스트리 정보도 함께 수정된다. 네트웍 환경에서는 레지스트리 정보를 서버에 저장함으로써 개인이나 작업그룹 들의 시스템 정책을 중앙통제식으로 관리할 수도 있다.
(텀즈 용어해설 인용)
IT 백두대간 자바2, SDK 1.4 | ||
현재는 아무런 키 값이 없는 상태이다. 컴파일이 되었으면 이제 프로그램을 실행해보자. 처음 실행을 하면 이름을 입력하라는 메시지가 나온다. 이름을 입력하면 레지스트리에 등록되고 결과를 출력한 후 종료된다.
다시 실행을 하게 되면, 이미 키 값이 존재한다는 메시지가 출력되며 다시 이름을 입력 받는다. 입력 받은 이름과 레지스트리에 등록된 이름을 비교하여 같으면 결과 출력을 하고, 다르다면 에러 메시지를 출력한다.
이번에는 직접 레지스트리 편집기에서 결과를 확인해보자. 그림에서처럼 키와 값이 입력된 것을 확인할 수 있다.
완성된 프로그램의 기능은 이 것이 전부이지만 잘 활용한다면 여러 분야에서 응용할 수 있을 것이다.
import java.util.prefs.*; import java.io.*; public class RegistryTest { // 키와 값을 출력한다. public static void printKeyValue(String key, String value) { System.out.println("Key = [" + key + "] , Value = [" + value + "]"); } // 해당 노드에 키를 포함하고 있는지 검사한다. public static boolean contains(Preferences node, String key) { return node.get(key, null) != null; } // 키보드로부터 이름을 입력받는다. public static String readName() { System.out.println("Input your name."); String value = null; try { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(isr); value = in.readLine(); } catch (IOException e) { // 예외 처리... } return value; } public static void main(String args[]) throws BackingStoreException { Preferences userRootPrefs = Preferences.userRoot(); String key = "name"; // 등록할 키 이름 String value = ""; String newName = null; if (contains(userRootPrefs, key)) { // 이미 키가 존재한다. System.out.println("Key already exists !"); value = userRootPrefs.get(key, ""); newName = readName(); // 키보드로부터 입력 받은 이름 if (newName.equals(value)) { // 입력된 이름과 레지스트리에 등록된 이름 같다. printKeyValue(key, value); // 결과 출력 후, 다른 원하는 작업 수행... } else { // 이름이 다르다, 당신은 누구얏 ? System.out.println("Invalid user name !"); } } else { // 키가 없으므로 처음 레지스트리에 등록 value = readName(); userRootPrefs.put(key, value); printKeyValue(key, value); } } }마치면서
이전 글 : 자바 스윙: 메뉴와 툴바 - 제 1편
다음 글 : C 언어에 대한 이해 그리고 오해
최신 콘텐츠