본문 바로가기
Java

[Java] awt 테트리스 모듈화 - Configuration

by teamnova 2023. 7. 2.

저번 글 1: https://stickode.tistory.com/822

 

저번 글 2: https://stickode.tistory.com/835

안녕하세요. 저번 시간에 이어서, 오늘은 Configuration코드에 대한 설명을 업로드하겠습니다. 주석으로 설명을 달아두었습니다.

 

Configuration.java

import java.awt.*;
import java.util.Hashtable;

/**
 * 프로그램 구성을 나타내는 클래스입니다. 이 클래스는 구성 매개변수의 읽기를 간소화하기 위한 정적 메서드를 제공합니다.
 * 또한 문자열 값을 더 유용한 객체로 변환하는 몇 가지 메서드를 제공합니다.
 *
 */
public class Configuration extends Object {

    /**
     * 내부 구성 속성 값입니다. 이 해시 테이블은 일부 프로그램(applet 등)에서 시스템 속성을 설정할 수 없기 때문에
     * 시스템 속성에 구성 매개변수를 설정하는 것을 피하기 위해 사용됩니다.
     */
    private static Hashtable config = new Hashtable();

    /**
     * 구성 매개변수 값을 반환합니다.
     *
     * @param key 구성 매개변수 키
     * @return 구성 매개변수 값. 설정되지 않은 경우 null을 반환합니다.
     */
    public static String getValue(String key) {
        if (config.containsKey(key)) {
            return config.get(key).toString();
        } else {
            try {
                return System.getProperty(key);
            } catch (SecurityException ignore) {
                return null;
            }
        }
    }

    /**
     * 구성 매개변수 값을 반환합니다. 구성 매개변수가 설정되지 않은 경우 대신 기본값을 반환합니다.
     *
     * @param key 구성 매개변수 키
     * @param def 기본값
     * @return 구성 매개변수 값. 설정되지 않은 경우 기본값을 반환합니다.
     */
    public static String getValue(String key, String def) {
        String value = getValue(key);

        return (value == null) ? def : value;
    }

    /**
     * 구성 매개변수 값을 설정합니다.
     *
     * @param key   구성 매개변수 키
     * @param value 구성 매개변수 값
     */
    public static void setValue(String key, String value) {
        config.put(key, value);
    }

    /**
     * 지정된 키에 대해 구성된 색상을 반환합니다. 키는 "tetris.color."로 시작하며 값은 시스템 속성에서 읽힙니다.
     * 색상 값은 16진수 웹 형식인 "#RRGGBB" 형식으로 지정되어야 합니다.
     * 기본 색상이 올바른 형식이 아닌 경우 흰색이 반환됩니다.
     *
     * @param key 구성 매개변수 키
     * @param def 기본값
     * @return 구성에서 지정된 색상 또는 기본 색상 값
     */
    public static Color getColor(String key, String def) {
        String value = getValue("tetris.color." + key, def);
        Color color;

        color = parseColor(value);
        if (color != null) {
            return color;
        }
        color = parseColor(def);
        if (color != null) {
            return color;
        } else {
            return Color.white;
        }
    }

    /**
     * 웹 색상 문자열을 구문 분석합니다. 색상 값이 올바르게 구문 분석되지 않은 경우 null이 반환됩니다.
     *
     * @param value 구문 분석할 색상 값
     * @return 문자열로 표현된 색상 또는 형식이 잘못된 경우 null
     */
    private static Color parseColor(String value) {
        if (!value.startsWith("#")) {
            return null;
        }
        try {
            return new Color(Integer.parseInt(value.substring(1), 16));
        } catch (NumberFormatException ignore) {
            return null;
        }
    }
}