자바 시스템 관련 클래스
- 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 |
'Programing Language > Java' 카테고리의 다른 글
[Java] 자바 기본 자료형 관련 클래스(Java Wrapper Class) (0) | 2022.07.22 |
---|---|
[Java] 자바 문자열 관련 클래스(Java String Related Classes) (0) | 2022.07.22 |
[Java] 자바 오브젝트 클래스(Java Object Class) (0) | 2022.07.18 |
[Java] 자바 표준 라이브러리(Java Standard Library) (0) | 2022.07.18 |
[Java] 자바 프로그램 모듈 관계 조정(Coordinating Module Relationships) (0) | 2022.07.18 |