Programing Language/Java

[Java] 자바 시스템 관련 클래스(Java System Class)

vinedpillar 2022. 7. 20. 09:55

자바 시스템 관련 클래스

  • System 클래스는 자바 프로그램이 운영체제의 일부 기능을 이용할 수 있도록 만들어줍니다.
    (자바 프로그램은 자바 가상 머신(JVM) 위에서 실행되기 때문에, 직접 접근하기 어려움)

  • System 클래스의 정적 필드와 정적 메서드를 이용하여 키보드 입력, 콘솔 출력, 프로그램 종료 시스템 속성 읽기 등의 기능을 사용할 수 있습니다.

 

 

 

시스템 클래스의 주요 필드와 메서드

  • 정적 필드
    • out: 모니터(콘솔)에 출력할 문자를 담기 위한 필드로 PrintStream 타입으로 선언되어 있습니다.
    • err: 모니터(콘솔)에 에러를 출력할 문자를 담기 위한 필드로 out과 마찬가지로 PrintStream 타입으로 선언되어 있습니다. 
    • in: 키보드에서 입력한 값을 담기 위한 필드로 InputStream 추상 클래스 타입으로 선언되어 있습니다. 

  • 정적 메서드
    • exit(int status): 프로세스를 종료합니다.
    • currentTimeMillis(): 현재 시간을 밀리세컨드 단위의 long 타입 값으로 반환합니다.
    • nanoTime(): 현재 시간을 나노세컨드 단위의 long 타입 값으로 반환합니다.
    • getProperty(): 운영체제와 사용자 정보를 반환합니다.
    • getenv(): 운영체제의 환경 변수 정보 제공를 반환합니다.

 

 

 

out, err 필드에서 자주 사용되는 메서드

  • print(): 메서드 파라미터의 값을 콘솔 화면에 출력합니다. 
    • print() 메서드는 용도에 따라서 print(일반 출력), println(출력 후 줄 바꿈), printf(지정된 서식으로 출력) 등이 있습니다.
    • 또한 입력되는 파라미터에 따른 오버라이딩이 되어있기 때문에 다양한 용도로 활용됩니다.
out, err 필드 메서드 활용 예시

public class OutAndErrExample {
    public static void main(string[] args) {
        try {
            int value = parseInt("2l");
            System.out.println(value);
        }
        catch(NumberFormatExecption e) {
            System.err.print("에러 내용: " + e.getMessage());
        }
    }
}

 

 

 

 

in 필드에서 자주 사용되는 메서드

  • read(): 입력된 키의 값을 불러옵니다.
    • enter가 입력되기 전까지 대기상태를 유지하며, enter가 입력되면 입력된 키값을 하나씩 읽습니다.
    • read() 메서드는 IOException을 발생시킬 수 있으므로 이에 대한 예외처리를 반드시 해주어야 합니다.
in 필드 메서드 활용 예시

public class InExample {
    public static void main(string[] args) {
        int speed = 0;
        int keyCode = 0;
        
        while(true) {
            // windows에서는 엔터 입력이 13, 10과 대응
            if(keyCode != 13 && keyCode != 10) [
                // 숫자 1은 49에 대응
                if(keyCode == 49) {
                	speed++;
                }
                // 숫자 2은 50에 대응
                else if(keyCode == 50) {
                	speed--;
                }
                // 숫자 3은 51에 대응
                else if(keyCode == 51) {
                	break;
                }
                
                System.out.println("-------------------------------");
                System.out.println("1. 속도 증가 | 2. 속도 감소 | 3. 중지");
                System.out.println("-------------------------------");
                System.out.println("현재 속도 = " + speed);
                System.out.println("선택: ");
            }
            
            keyCode = System.in.read();
        }
        
        System.out.println("프로그램 종료");
    }
}

 

 

 

 

프로세스 관련 메서드

  • exit(): 프로세스 종료 메서드
    • System 클래스의 exit() 메서드를 이용해서 프로세스를 강제로 종료시킬 수 있습니다.
    • exit() 메서드는 int 타입의 매개 변수를 필요로 하는데, 정상 종료는 0, 비정상 종료는 1, -1을 주는 것이 관례입니다.
exit() 메서드 활용 예시

public class ExitExample {
    public static void main(string[] args) {
        for(int i = 0; i < 10; i++) {
            System.out.println(i);
            if(i == 5) {
                System.out.println("프로그램 강제 종료");
                System.exit(0);
            }
        }
    }
}

 

  • currenttimeMillis(), nanoTime(): 운영체제의 시간 정보를 불러오는 메서드
    • System 클래스의 currenttimeMillis() 메서드와 nanoTime() 메서드를 이용하여 프로세스의 시간을 읽어올 수 있습니다.
    • 해당 메서드는 주로 프로그램의 처리 시간을 측정하는데 활용됩니다. 
    • 프로그램의 처리를 시작할 때와 프로그램의 처리가 끝났을 때 각각 체크하여 두 시간의 차이를 통해 구합니다.
시간 관련 메서드 활용 예시

public class RuntimeExample {
    public static void main(string[] args) {
        int sum = 0
        long calTime = 0;
        
        long startTime = System.nanoTime();
        for(int i = 0; i <= 1000000; i++) {
            sum += i;
        }
        long endTime = System.nanoTime();
        
        calTime = endTime - startTime;
        
        System.out.println("1 ~ 1000000 까지의 합은 " + sum + "입니다.");
        System.out.println("계산에 소요된 시간은 " + calTime + "나노세컨드 입니다.");
    }
}

 

  • getProperty(), getenv(): 시스템 정보를 불러오는 메서드
    • system 클래스의 getProperty() 메서드와 getenv() 등의 메서드를 통해 시스템 프로퍼티를 읽어올 수 있습니다.
    • 시스템 프로퍼티는 자바 프로그램이 시작될 때 자동 설정되는 시스템의 속성을 뜻합니다.
    • 해당 메서드의 매개 변수 값으로 key값을 입력하면 그에 맞는 value 값을 반환합니다.
속성 정보 관련 메서드 활용 예시

public class PropertyExample {
    public static void main(string[] args) {
        String osName = System.getProperty("os.name");
        String userName = System.getProperty("user.name");
        String UserHome = System.getProperty("user.home");
        
        System.out.println(osName);
        System.out.println(userName);
        System.out.println(UserHome);
    }
}

 

  • 시스템 정보의 속성 리스트
속성 이름(key) 설명 값(value) 예시
java.specification.version 자바 스펙 버전 17
java.home JDK 디렉토리 경로 C:\ProgramFiles\Java\jdk-17.0.3
os.name 운영체제 Windows 11
user.name 사용자 이름 xxx
user.home 사용자 홈 디렉토리 경로 C:\User\xxx
user.dir 현재 디렉토리 경로 C:\JavaStudy\Organize