System

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

비밀번호 확인 로직

package sec3;

// 보안관리자를 설정해서 특정 조건이 되면 시스템 종료
public class SystemEx1 {
    public static void main(String[] args) {
        // 자바 11 이전 버전에서 사용하던 방법
//        System.setSecurityManager(new SecurityManager(){
//            @Override
//            public void checkExit(int status) {
//                if(status != 5) {
//                    throw new SecurityException();
//                }
//            }
//        });
        
        
        for(int i=0; i<5; i++) {
            try {
                // 비밀번호 확인 로직
                System.out.println(i);
            } catch (SecurityException e) {
                System.out.println("종료");
                System.exit(i); // 여기에서 바로 종료
            }
        }
    }
}

가비지 컬렉션

package sec3;

class Student {
    private int no;
    private String name;

    public Student() {}

    public Student(int no, String name) {
        this.no = no;
        this.name = name;
    }

    public int getNo() {
        return no;
    }

    public void setNo(int no) {
        this.no = no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class SystemEx2 {
    public static void main(String[] args) {
        Student st1;
        st1 = new Student(1, "홍길동");
        System.out.println(st1.getNo()+st1.getName());

        // 쓰레기 값
        // 자바는 자동으로 가비지 컬렉션을 사용하기에 초기 값으로 출력
        st1 = null;
        st1 = new Student();
        System.out.println(st1.getNo()+st1.getName());

        // 가비지 컬렉션 동작
        // 더 이상 사용하지 않는 메모리 공간을 사용할 수 있는 공간으로 바꿈
        System.gc();
    }
}

시간 복잡도, 성능평가

package sec3;

// 성능 측정
public class SystemEx3 {
    public static void main(String[] args) {
        // 성능 평가 기준 ***(중요)
        // 처리능력(Throughput) | 높아야 좋음, 반환시간(Turn Arround) | 낮아야 좋음,
        // 사용 가능도(Availability) | 높아야 좋음, 신뢰도(Reliability) | 높아야 좋음
        long tot = 0;
        long start = System.nanoTime(); //10**-9 초
        for(int i=0; i<=1000000; i++) {
            System.out.println(i);
            tot+=i;
        }
        long end = System.nanoTime();
        System.out.println("누적 합 : "+tot);
        System.out.println("걸린 시간 : "+(end-start)+"ns");
    }
}

시스템 정보 출력

package sec3;

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

public class SystemEx4 {
    public static void main(String[] args) {
        System.out.println("환경변수 : "+System.getenv("JAVA_HOME")); // 환경 변수 중에서 JAVA_HOME 정보를 출력
        System.out.println("운영체제 : "+System.getProperty("os.name"));
        System.out.println("사용자 : "+System.getProperty("user.name"));
        System.out.println("사용자 디렉토리 : "+System.getProperty("user.home"));
        System.out.println("자바버전 : "+System.getProperty("java.version"));
        System.out.println("자바 홈 : "+System.getProperty("java.home"));

        Properties props = System.getProperties();
//        System.out.println(props);
        Set keys = props.keySet();
        for (Object k:keys) {
            String key = (String) k;
            String val = System.getProperty(key);
            System.out.println(key+" : "+val);
        }
    }
}
profile
자바 풀 스택 주니어 개발자

0개의 댓글