본문 바로가기

BackEnd/Java

[java] 이것이 자바다 ch12 System 클래스

728x90
반응형

1. System 클래스

   ▷ System 클래스의 정적 static 필드와 메소드를 이용하면 프로그램 종료, 키보드 입력, 콘솔(모니터) 출력,

       현재 시간 읽기, 시스템 프로퍼티 읽기 등이 가능합니다.

 

◎ 정적 멤버

NO 정적 멤버 용도
1 필드 out 콘솔(모니터)에 문자 출력
2 err 콘솔(모니터)에 에러 내용 출력
3 in 키보드 입력
4 메소드 exit(int status) 프로세스 종료
5 currentTimeMillis() 현재 시간을 밀리초 단위의 long 값으로 리턴
6 nanoTime() 현재 시간을 나노초 단위의 long 값으로 리턴
7 getProperty() 운영체제와 사용자 정보 제공
8 getenv() 운영체제의 환경 변수 정보 제공

 

 

(1) 콘솔 출력

public class ErrExample {

	public static void main(String[] args) {
		
		try {
			int value = Integer.parseInt("1oo");
		} catch(NumberFormatException e) {
			System.err.println("[에러 내용]");
			System.err.println(e.getMessage());
		}
	}
}

//	출력 : 
//	[에러 내용]
//	For input string: "1oo"


System.err.println를 이용하면 글자가 빨갛게 출력됩니다.

 

 

(2) 키보드 입력

   ▷ 키보드로부터 입력된 키를 읽기 위해 System 클래스에서 in 필드를 제공합니다.

        in 필드를 이용해서 read() 메소드를 호출하면 입력된 키의 코드 값을 얻을 수 있습니다.

 

1. 사용 코드

int keyCode = System.in.read();



2. 키 코드는 아래의 번호와 같습니다.


3. 키 코드 사용 예시

public class InExample {
	public static void main(String[] args) throws Exception {
		int speed = 0;
		int keyCode = 0;
		
		while(true) {
			//Enter 키를 읽지 않았을 경우에만 실행
			if(keyCode != 13 && keyCode != 10) {
				if(keyCode == 49) {		//숫자 1 키를 읽었을 경우
					speed++;
				} else if(keyCode == 50) {	//숫자 2 키를 읽었을 경우
					speed--;
				} else if(keyCode == 51) {	//숫자 3 키를 읽었을 경우
					break;
				}
				
				System.out.println("------------------------");
				System.out.println("1. 증속 | 2. 감속 | 3. 중지");
				System.out.println("------------------------");
				System.out.println("현재 속도 = " + speed);
				System.out.print("선택 : ");
			}
			
			// 키를 하나씩 읽음
			keyCode = System.in.read();
		}
		System.out.println("프로그램 종료");
	}
}


//	출력 :
//	------------------------
//	1. 증속 | 2. 감속 | 3. 중지
//	------------------------
//	현재 속도 = 0
//	선택 : 1
//	------------------------
//	1. 증속 | 2. 감속 | 3. 중지
//	------------------------
//	현재 속도 = 1
//	선택 : 2
//	------------------------
//	1. 증속 | 2. 감속 | 3. 중지
//	------------------------
//	현재 속도 = 0
//	선택 : 3
//	프로그램 종료


keyCode = System.in.read(); 를 사용하면 선택에 번호를 입력할 수 있습니다.

 

 

(3) 프로세스 종료

자바 프로그램 → JVM으로 프로세스가 생성 → main() 메소드 호출 → 프로그램 구동

GUI 프로그램 : 종료버튼
강제 프로세스 종료 : System.exit() 메소드
                                  System.exit(매개값) : 0, 1 or -1
                                  0 : 정상 종료
                                  1 or -1 : 비정상 종료

 

◎ 프로세스 종료 예제

public class ExitExample {

	public static void main(String[] args) {
		for(int i=0; i<10; i++) {
			// i값 출력
			System.out.println(i);
			if(i == 5) {
				// JVM 프로세스 종료
				System.out.println("프로세스 강제 종료");
				System.exit(0);
			}
		}
		System.out.println(123);
	}
}

//	출력 : 
//	0
//	1
//	2
//	3
//	4
//	5
//	프로세스 강제 종료


프로세스 자체를 종료하므로 뒤의 123은 concol에 출력되지 않습니다.

 

 

(4) 진행 시간 읽기

currentTimeMillis() 메소드 nanoTime() 메소드 : 1970년 1월 1일 0시

 

NO 메소드 용도
1 long currentTimeMillis() 1/1000 초 단위로 진행된 시간을 리턴
2 long nanoTime() 1/10^9 초 단위로 진행된 시간을 리턴

 

진행 시간 읽기 예제

public class MeasureRunTimeExample {
	public static void main(String[] args) {
		long time1 = System.nanoTime();
		int sum = 0;
		for(int i=1; i<=1000000; i++) {
			sum += i;
		}
		
		long time2 = System.nanoTime();
		
		System.out.println("1~1000000까지의 합: " + sum);
		System.out.println("계산에 " + (time2-time1) + "나노초가 소요되었습니다.");

	}
}

//	출력 : 
//	1~1000000까지의 합: 1784293664
//	계산에 2416400나노초가 소요되었습니다.

 

 

(5) 시스템 프로퍼티 읽기

NO 속성 이름(key) 설명 값(value)
1 java.specification.version 자바 스펙 버전 17
2 java.home JDK 디렉토리 경로 C:\Program Files\Java\jdk-17.0.3
3 os.name 운영체제 Windows 10
4 user.name 사용자 이름 xxx
5 user.home 사용자 홈 디렉토리 경로 C:\Users\xxx
6 user.dir 현재 디렉토리 경로 C:\Thisis.JavaSecondEdition\workspace\thisisjava

 

시스템 프로퍼티 읽기 예제

import java.util.Properties;
import java.util.Set;

public class GetPropertyExample {
	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);
		
		// 전체 키와 값으로 출력
		System.out.println("----------------------------");
		System.out.println(" key: value ");
		System.out.println("----------------------------");
		Properties props = System.getProperties();
		Set keys = props.keySet();
		
		for(Object objKey : keys) {
			String key = (String) objKey;
			String value = System.getProperty(key);
			System.out.printf("%-40s: %s\n", key, value);
		}
		
	}
}

//	출력 : 
//	Windows 10
//	codepc
//	C:\Users\codepc
//	----------------------------
//	 key: value 
//	----------------------------
//	java.runtime.name                       : Java(TM) SE Runtime Environment
//	sun.boot.library.path                   : C:\Program Files\Java\jdk1.8.0_251\jre\bin
//	java.vm.version                         : 25.251-b08
//	.
//	.
//	.

 

System 프로퍼티에 대해서 알아보았습니다.

다양한 클래스들이 있는데 제가 다 이용할 수 있을지 의문이드네요,,,ㅎㅎ

 

하지만 응용해보도록 노력해볼게요!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형