Java 입문 | java.lang 패키지 | System 클래스

System 클래스는 실행시간 환경과 관련된 속성과 메소드를 가지고 있다. System 클래스에서 제공되는 out과 in을 이용한 표준 입력과 출력, err을 이용한 에러 출력에 관한 클래스 변수를 가지고 있고 객체를 복사해 주는 메소드와 프로그램을 작성할 때는 사용할 수 있는 유용한 메소드를 제공한다.

System 변수

변수 설명
final static InputStream in 표준 입력에 사용된다.
final static PrintStream out 표준 출력에 사용된다. print(), println() 매개변수를 받아 모니터에 출력을 수행한다.
final static PrintStream err 에러 출력에 사용된다. print(), println() 매개변수를 받아 모니터에 에러를 출력을 수행한다.

System 주요 메소드

메소드 설명
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 배열을 복사한다. src와 dest은 복사될 배열의 변수이고, srcPos와 destPos는 복사가 시작될 위치이고, length는 복사될 배열의 크기이다.
static long currentTimeMillis() 1970년 1월 1일 자정부터 현재까지의 시간을 밀리초로 반환한다.
static void exit(int status) 현재 수행적인 응용 프로그래을 종료시킨다. status로 종료 상태를 반환한다. 보통 마이너스(-)는 비정상 종료를 뜻한다.
static void gc() 가비지 콜렉션(garbage collection)을 실행시킨다.
static String getPropertys() 시스템 환경 변수 목록을 얻어온다.
static String getProperty(String key) 시스템 환경 변수를 얻어온다.
static String getProperty(String key, String def) 프로그램 환경 변수를 설정한다.

System 예제

예제) System.currentTimeMillis()

다음은 System.currentTimeMillis() 메소드에 대한 예제이다.

package com.devkuma.tutorial.java.lang;

public class SystemCurrentTimeMillis {

    public static void main(String[] args) throws InterruptedException {

        long start = System.currentTimeMillis();
        System.out.println("start time : " + System.currentTimeMillis());

        Thread.sleep(1000); // 1초간 중지

        long end = System.currentTimeMillis();
        System.out.println("end time : " + System.currentTimeMillis());

        System.out.println("duration : " + (start - end));
    }
}

실행 결과는 아래와 같다.

start time : 1497970891769
end time : 1497970892771
duration : -1002

예제) System.arraycopy()

다음은 System.arraycopy() 메소드에 대한 예제이다.

package com.devkuma.tutorial.java.lang;

public class SystemArraycopy {

    public static void main(String[] args) {
        char[] src = { 'a', 'b', 'c', 'd', 'e' };
        char[] dest = { 'x', 'x', 'x', 'x', 'x' };

        System.out.println("src=" + new String(src));
        System.out.println("dest=" + new String(dest));
        System.arraycopy(src, 0, dest, 0, src.length);
        System.out.println();
        System.out.println("src=" + new String(src));
        System.out.println("dest=" + new String(dest));

    }
}

실행 결과는 아래와 같다.

src=abcde
dest=xxxxx

src=abcde
dest=abcde

예제) System.getPropertys(), System.getProperty()

다음은 시스템 환경 변수에 관한 System.getPropertys(), System.getProperty() 메소드에 대한 예제이다.

package com.devkuma.tutorial.java.lang;

import java.util.Enumeration;
import java.util.Properties;

public class SystemProperties {

    public static void main(String[] args) {

        // Java Runtime Environment 버젼
        System.out.println("java.version=" + System.getProperty("java.version"));
        // Java Runtime Environment 버젼
        System.out.println("java.vendor=" + System.getProperty("java.vendor"));
        // Java Runtime Environment 벤더
        System.out.println("java.vendor.url=" + System.getProperty("java.vendor.url"));
        // Java Runtime Environment 설치 디렉토리
        System.out.println("java.home=" + System.getProperty("java.home"));

        // Java 가상 머신 사양
        System.out.println("java.vm.specification.version=" + System.getProperty("java.vm.specification.version"));
        // Java 가상 머신 사양 벤더
        System.out.println("java.vm.specification.vendor=" + System.getProperty("java.vm.specification.vendor"));
        // Java 가상 머신 사양명
        System.out.println("java.vm.specification.name=" + System.getProperty("java.vm.specification.name"));
        // Java 가상 머신 구현 버젼
        System.out.println("java.vm.version=" + System.getProperty("java.vm.version")); //
        // Java 가상 머신 구현 벤더
        System.out.println("java.vm.vendor=" + System.getProperty("java.vm.vendor")); //
        // Java 가상 머신 구현명
        System.out.println("java.vm.name=" + System.getProperty("java.vm.name"));

        // Java Runtime Environment 의 사양 버젼
        System.out.println("java.specification.version=" + System.getProperty("java.specification.version"));
        // Java Runtime Environment 의 사양의 벤더
        System.out.println("java.specification.vendor=" + System.getProperty("java.specification.vendor"));
        // Java Runtime Environment 의 사양명
        System.out.println("java.specification.name=" + System.getProperty("java.specification.name"));
        // Java 클래스의 형식의 버젼 번호
        System.out.println("java.class.version=" + System.getProperty("java.class.version"));
        // Java 클래스 패스
        System.out.println("java.class.path=" + System.getProperty("java.class.path"));
        // 라이브러리의 로드시에 검색하는 패스의 리스트
        System.out.println("java.library.path=" + System.getProperty("java.library.path"));
        // 디폴트 일시파일의 패스
        System.out.println("java.io.tmpdir=" + System.getProperty("java.io.tmpdir"));
        // 사용하는 JIT 컴파일러의 이름
        System.out.println("java.compiler=" + System.getProperty("java.compiler"));
        // 확장 디렉토리의 패스
        System.out.println("java.ext.dirs=" + System.getProperty("java.ext.dirs"));

        // operating system 명
        System.out.println("os.name=" + System.getProperty("os.name"));
        // operating system 아키텍쳐
        System.out.println("os.arch=" + System.getProperty("os.arch"));
        // operating system 버젼
        System.out.println("os.version=" + System.getProperty("os.version"));

        // 파일 단락 문자 (UNIX 에서는 "/")
        System.out.println("file.separator=" + System.getProperty("file.separator"));
        // 경로 단락 문자 (UNIX 에서는 ":")
        System.out.println("path.separator=" + System.getProperty("path.separator"));
        // 행 단락 문자 (UNIX 에서는 "\n")
        System.out.println("line.separator=" + System.getProperty("line.separator"));

        // 사용자명
        System.out.println("user.name=" + System.getProperty("user.name"));
        // 사용자 홈 디렉토리
        System.out.println("user.home=" + System.getProperty("user.home"));
        // 사용자 현재의 작업 디렉토리
        System.out.println("user.dir=" + System.getProperty("user.dir"));
        System.out.println();

        // 전체 정보 조회
        Properties prop = System.getProperties();
        Enumeration<?> enu = prop.keys();
        while (enu.hasMoreElements()) {
            String key = (String) enu.nextElement();
            String value = (String) prop.get(key);
            System.out.println(key + "=" + value);
        }
    }
}

실행 결과는 아래와 같다.

java.version=1.8.0_161
java.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre
java.vm.specification.version=1.8
java.vm.specification.vendor=Oracle Corporation
java.vm.specification.name=Java Virtual Machine Specification
java.vm.version=25.161-b12
java.vm.vendor=Oracle Corporation
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
java.specification.version=1.8
java.specification.vendor=Oracle Corporation
java.specification.name=Java Platform API Specification
java.class.version=52.0
java.class.path=/Library/Java/JavaVirtualMachines...(생략)...
java.library.path=/Users/kimkc/Library/Java/Extensions:...(생략)...
java.io.tmpdir=/var/folders/f2/s8f8bt7j2vdf4538y4lydp480000gn/T/
java.compiler=null
java.ext.dirs=/Users/kimkc/Library/Java/Extensions:...(생략)...
os.name=Mac OS X
os.arch=x86_64
os.version=10.13.6
file.separator=/
path.separator=:
line.separator=

user.name=kimkc
user.home=/Users/kimkc
user.dir=/Users/kimkc/dev/workspace/java-tutorial

java.runtime.name=Java(TM) SE Runtime Environment
sun.boot.library.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib
java.vm.version=25.161-b12
gopherProxySet=false
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=:
java.vm.name=Java HotSpot(TM) 64-Bit Server VM
file.encoding.pkg=sun.io
user.country=KR
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=unknown
java.vm.specification.name=Java Virtual Machine Specification
user.dir=/Users/kimkc/dev/workspace/java-tutorial
java.runtime.version=1.8.0_161-b12
java.awt.graphicsenv=sun.awt.CGraphicsEnvironment
java.endorsed.dirs=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre/lib/endorsed
os.arch=x86_64
java.io.tmpdir=/var/folders/f2/s8f8bt7j2vdf4538y4lydp480000gn/T/
line.separator=

java.vm.specification.vendor=Oracle Corporation
os.name=Mac OS X
sun.jnu.encoding=UTF-8
java.library.path=/Users/kimkc/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=10.13.6
http.nonProxyHosts=local|*.local|169.254/16|*.169.254/16|localhost|*.localhost
user.home=/Users/kimkc
user.timezone=
java.awt.printerjob=sun.lwawt.macosx.CPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
java.class.path=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/...(생략)...
user.name=kimkc
java.vm.specification.version=1.8
sun.java.command=com.devkuma.tutorial.java.lang.SystemProperties
java.home=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home/jre
sun.arch.data.model=64
user.language=ko
java.specification.vendor=Oracle Corporation
user.language.format=en
awt.toolkit=sun.lwawt.macosx.LWCToolkit
java.vm.info=mixed mode
java.version=1.8.0_161
java.ext.dirs=/Users/kimkc/Library/Java/Extensions:...(생략)...
java.vendor=Oracle Corporation
file.separator=/
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding=UnicodeBig
sun.cpu.endian=little
socksNonProxyHosts=local|*.local|169.254/16|*.169.254/16|localhost|*.localhost
ftp.nonProxyHosts=local|*.local|169.254/16|*.169.254/16|localhost|*.localhost
sun.cpu.isalist=