삶 가운데 남긴 기록 AACII.TISTORY.COM
JAVA application 런타임 상태 정보 유지 기법 본문
1. JRE 런타임 실행 옵션
자바 application을 실행할 때 JRE 실행 옵션으로 변수 값을 지정할 수 있습니다.
-DmyVariable=변수 값
이런 식으로 지정 할 수 있는데
System.getProperty("myVariable");
같이 System.getProperty()를 이용하여 실행 중인 application 내에서 해당 변수 값을 읽어서 언제든 사용할 수 있습니다.
이 변수 값을 다시 설정하려면
System.setProperty("myVariable", "value");
이런 식으로 실행 중에 setProperty(key, value)으로 변수 값을 변경할 수도 있습니다.
예를 들어 아래 Application이 runnable jar로 MainEx.jar 라고 빌드 되었다고 가정하고
java -DencryptType=AES -jar MainEx.jar args1 args2 args3
이런 식으로 인코딩 타입을 실행할 때 실행 옵션을 지정해 주고 application 내에서 이를 이용할 수 있습니다.
public class MainEx {
private static String runtimeValue = null;
public static void main(String[] args) {
MainEx.runtimeValue = System.getProperty("encryptType");
//변수 값이 설정되었는지 확인
if (runtimeValue != null) {
System.out.println("암호화 방식 알고리즘: " + runtimeValue);
}
//실행 옵션
if(args.length > 0){
for(int i = 0; i < args.length; i++{
System.out.println(args[i]);
}
}
}
}
물론 main()메서드를 사용하면 args 배열을 통해 실행 옵션을 전달할 수 있지만,
Web application이나 RCP application 같이 main()을 사용하지 않는 경우 유용하게 사용할 수 있습니다.
2. 싱글톤 패턴
자바 application에서 런타임 실행 중 메모리에 상태 정보를 유지하고 싶을 때 싱글톤 패턴을 이용하는 것이 간단합니다.
싱글톤 패턴이란 다음과 같은 규칙을 따르는 패턴입니다.
- private volatile static 으로 인스턴스 변수를 선언하여 클래스의 유일한 인스턴스를 멀티스레드에 안전하도록 함.
- private 생성자를 만들어 외부 클래스에서 인스턴스를 생성하는 것을 막아서 인스턴스를 유일하게 함.
- public static 메서드를 정의하여 내부에서 인스턴스를 하나만 생성하여 그 인스턴스를 리턴해주는 메서드를 작성함.
public class ApplicationState {
private volatile static ApplicationState instance; //멀티스레드로 실행할게 아니라면 volatile 을 선언하지 않아도 됨.
private String userName;
//private 생성자로 외부에서 직접 객체 생성을 막음
private ApplicationState() {
userName = "";
}
//인스턴스 리턴을 위한 메서드 작성
public static ApplicationState getInstance() {
if (instance == null) {
instance = new ApplicationState();
}
return instance;
}
//사용자 이름 설정
public void setUserName(String name) {
this.userName = name;
}
//사용자 이름 가져오기
public String getUserName() {
return userName;
}
}
그러면 이 ApplicationState 클래스의 인스턴스는 싱글톤으로 정의되었기 때문에
Application 내의 어떤 클래스라도 getInstance() 메서드를 사용해서 application 내에서 유일한 이 인스턴스를 가져올 수 있습니다.
이를 이용해서 상태 정보를 실행 중에 유지하고 사용할 수 있습니다.
예를 들어
public class AnotherClass {
public void printUserInfo() {
//getInstance()를 이용해서 ApplicationState의 유일한 인스턴스 얻기
ApplicationState state = ApplicationState.getInstance();
//상태 정보 읽어오기
String userName = state.getUserName();
//읽어온 상태 정보 출력
System.out.println("사용자 이름: " + userName);
}
}
이제 실행 용 Main.java 클래스를 만들어 실행시켜 봅니다.
public class Main {
public static void main(String[] args) {
//ApplicationState 인스턴스 얻기
ApplicationState state = ApplicationState.getInstance();
//상태 정보 설정
state.setUserName("AlephGem");
//AnotherClass 인스턴스 생성
AnotherClass anotherClass = new AnotherClass();
//다른 클래스에서 상태 정보 출력
anotherClass.printUserInfo();
}
}
이렇게 JRE 런타임 실행 옵션이나 싱글톤 패턴을 이용하면 application이 실행하는 동안 상태 값을 유지시켜서 언제든 사용할 수 있습니다.
Web Application의 쿠키처럼 file을 파일 시스템에 저장해서 필요한 상태 값을 유지하는 방법도 있습니다만 쿠키가 갖고 있는 보안 이슈를 그대로 갖고 있게 되는 것은 감수하셔야 합니다.
'DEV&OPS > Java' 카테고리의 다른 글
이클립스 속도 튜닝 (0) | 2024.05.10 |
---|---|
JAVA URL, JSON 처리 (0) | 2024.05.08 |
Jasypt(Java Simplified Encryption) 사용 방법 (0) | 2024.05.08 |
JAVA Visitor 패턴 - 자료구조를 돌아다니면서 처리 (0) | 2024.05.08 |
SWT JFace 주요 위젯 (0) | 2024.05.08 |