java.lang.System 클래스

유방현·2024년 10월 23일

System 클래스 개요

java.lang.System 클래스는 자바 프로그램과 실행 환경 사이의 인터페이스 역할을 합니다. 시스템 관련 속성 접근, 표준 입출력, 시스템 자원 관리 등의 기능을 제공합니다.

주요 특징:

  • 모든 멤버가 static
  • 생성자가 private (인스턴스화 불가)
  • java.lang 패키지에 포함 (별도 import 불필요)

표준 입출력 스트림

// 표준 출력
System.out.println("Hello World");  // 출력 후 줄바꿈
System.out.print("Hello");         // 출력만
System.out.printf("%d %s", 10, "Hello");  // 형식화된 출력

// 표준 에러
System.err.println("Error message");

// 표준 입력
int input = System.in.read();  // 바이트 단위 읽기

시스템 속성 관리

// 시스템 속성 얻기
String javaVersion = System.getProperty("java.version");
String osName = System.getProperty("os.name");
String userHome = System.getProperty("user.home");

// 시스템 속성 설정
System.setProperty("custom.property", "value");

// 모든 시스템 속성 출력
Properties props = System.getProperties();
props.list(System.out);

주요 시스템 속성:

  • java.version: Java 버전
  • java.home: Java 설치 경로
  • os.name: 운영체제 이름
  • user.name: 사용자 계정
  • user.home: 사용자 홈 디렉토리
  • user.dir: 현재 작업 디렉토리

환경 변수 접근

// 환경 변수 얻기
Map<String, String> env = System.getenv();
String path = System.getenv("PATH");

// 환경 변수 출력
env.forEach((k, v) -> System.out.println(k + "=" + v));

시간 관련 메서드

// 현재 시간 (밀리초)
long currentTimeMillis = System.currentTimeMillis();

// 나노초 단위 시간
long nanoTime = System.nanoTime();

// 실행 시간 측정 예제
long start = System.currentTimeMillis();
// ... 실행 코드 ...
long end = System.currentTimeMillis();
System.out.println("실행 시간: " + (end - start) + "ms");

메모리 관련 메서드

// 가비지 컬렉션 요청
System.gc();

// 메모리 정보
Runtime runtime = Runtime.getRuntime();
long totalMemory = runtime.totalMemory();  // 총 메모리
long freeMemory = runtime.freeMemory();    // 사용 가능한 메모리
long maxMemory = runtime.maxMemory();      // 최대 메모리

프로그램 종료

// 정상 종료 (상태 코드 0)
System.exit(0);

// 비정상 종료 (상태 코드 1 또는 다른 값)
System.exit(1);

배열 복사

// 배열 복사
int[] source = {1, 2, 3, 4, 5};
int[] dest = new int[5];

System.arraycopy(source, 0, dest, 0, source.length);

보안 관리자

// 현재 보안 관리자 얻기
SecurityManager security = System.getSecurityManager();

// 보안 관리자 설정
System.setSecurityManager(new SecurityManager());

10. 유용한 사용 예제

실행 시간 측정

long startTime = System.nanoTime();
// 측정할 코드
long endTime = System.nanoTime();
long duration = (endTime - startTime);  // 나노초 단위

시스템 정보 출력

public static void printSystemInfo() {
    System.out.println("Java Version: " + System.getProperty("java.version"));
    System.out.println("Java Home: " + System.getProperty("java.home"));
    System.out.println("OS: " + System.getProperty("os.name"));
    System.out.println("User: " + System.getProperty("user.name"));
    System.out.println("Working Directory: " + System.getProperty("user.dir"));
}

메모리 사용량 모니터링

public static void printMemoryInfo() {
    Runtime runtime = Runtime.getRuntime();
    long totalMB = runtime.totalMemory() / 1024 / 1024;
    long freeMB = runtime.freeMemory() / 1024 / 1024;
    long usedMB = totalMB - freeMB;

    System.out.println("사용 중인 메모리: " + usedMB + "MB");
    System.out.println("사용 가능한 메모리: " + freeMB + "MB");
    System.out.println("전체 메모리: " + totalMB + "MB");
}

주의사항

  1. System.gc() 호출은 권장되지 않음 (JVM이 알아서 처리)
  2. System.exit()는 신중히 사용
  3. System.out.println()은 성능에 영향을 줄 수 있음 (로깅 프레임워크 사용 권장)
  4. 시스템 속성 변경 시 보안 관리자 확인 필요

0개의 댓글