ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java.lang.System Class
    Java 2020. 1. 7. 20:04
    반응형

    생성자

    없음 (가장 큰 특징)

    static 변수 3가지

    static PrintStream err // 에러 및 오류를 출력할 때 사용
    static InputStream in  // 입력값을 처리할 때 사용
    static PrintStream out // 출력값을 처리할 때 사용

    즉, 입/출력과 관련된 메서드의 경우 System Class를 보는 것이 아닌 PrintStream과 InputStream을 봐야함

    System Class의 역할

    • System Property(속성) 값 관리

    • System Environment(환경) 값 조회

    • GC 수행 (절대 사용하지 말 것)

    • JVM 종료 (절대 사용하지 말 것)

    • 현재 시간 조회

    • 기타 (관리용 메서드) - 거의 사용되지 않음

    System Property(속성) 값 관리

    // key에 지정된 시스템 속성을 제거
    static String clearProperty(String key)
    
    // 현재 시스템 속성을 Properties 클래스 형태로 제공
    static Properties getProperties()
    
    // key에 지정된 문자열로 된 시스템 속성값(value)을 얻음
    static String getProperty(String key)
    
    // key에 지정된 문자열로된 시스템 속성값(value)을 얻고, 만약 없으면 def에 지정된 값을 리턴
    static String getProperty(String key, String def)
    
    // Properties 타입으로 넘겨주는 매개 변수에 있는 값들을 시스템 속성에 넣음
    static void setProperties(Properties props)
    
    // key에 지정된 시스템 속성의 값을 value로 대체
    static String setProperty(String key, String value)

    여기서 문제. Properties란 무엇인가?

    • java.util.Properties는 Hashtable을 상속받은 클래스
    • 자바 프로그램을 실행하면 무조건 Properties 객체가 생성되며, 그 값은 언제 어디든 같은 JVM 내에서는 꺼내서 사용할 수 있음

    System Environment(환경) 값 조회

    // 현재 시스템 환경에 대한 Map 형태의 리턴값을 받음
    static Map<String, String> getenv()
    
    // 지정한 name에 해당하는 값을 받음
    static String getenv(String name)

    System env의 경우 조회만 가능함(변경 불가)

    GC 수행 - 사용하지 말 것!

    // 가비지 컬렉터 실행
    static void gc()
    
    // GC 처리를 기다리는 모든 객체에 대하여 finalize() 메서드를 실행
    static void runFinalization()

    자바의 경우 GC를 JVM이 수행함

    강제로 메서드 호출시 시스템은 모든 일을 중단하고, 해당 작업을 실행해야 함 → 매우 비효율적

    JVM 종료 - 사용하지 말 것!

    // 수행중인 JVM을 멈춤. status 0 → 정상 종료, 그 외 → 비정상 종료
    static void exit(int status)

    혼자 개발하는 미니 프로그램 해당 메서드를 호출하지 않아도 JVM이 멈추게 되어있음

    (주의!) 웹 애플리케이션이나 안드로이드 앱 등에서 해당 메서드를 사용하면 해당 애플리케이션의 JVM이 멈추기 때문에 장애로 직결됨

    현재 시간 조회

    // UTC(Universal time) 기준 1970/01/01 00:00 ~ 지금까지의 차이를 출력
    
    // 현재 시간을 밀리초(1/1000초) 단위로 리턴 - 주로 현재 시간 확인
    static long currentTimeMillis()
    
    // 현재 시간을 나노초(1/1,000,000,000초) 단위로 리턴 - 주로 시간 측정
    static long nanoTime()

    System.out

    System.out vs System.err 변수

    PrintStream(static)이라는 동일 클래스의 객체

    정상적인 출력인지, 에러가 났을 때의 출력인지의 차이

    PrintStream 클래스의 출력을 위한 주요 메서드

    // 매개 변수에 있는 내용들을 출력
    print()
    
    /* 매개 변수에 있는 내용들을 출력 후 줄바꿈
     * 공란일 경우, 그냥 줄바꿈 println()
     */
    println()
    
    // JDK 5 ~ 포맷을 위한 메서드
    format()
    printf()
    
    // System.out에서는 거의 안 쓰임
    write()

    print()와 println()

    • boolean, char, char[] int, long, double, float, Object, String을 매개변수로 받음

      • byte나 short 타입의 경우 int 타입으로 자동형변환 되므로 문제 없음

    • toString()으로 메서드 결과를 출력하는 것이 아닌 valueOf()로 결과를 받은 후 출력

      • null의 경우 null로 출력함

      • 객체를 출력할 떄는 toString()보다 valueOf() 메서드가 훨씬 안전함(NullPointException 방지)

    public void jamieNull() {
        Object objNull = null;
        
        // null이 출력됨 - obj.valueOf()했기 때문
        System.out.println(obj);
        
        /* null is Null이 출력됨(JDK 5 ~ StringBuidler 연산이 되기 때문)
         * new StringBuilder().append(obj).append(" is Null")
         */
        System.out.println(obj + " is Null");
        
        /* 에러 발생 - NullPointerException
         * Exception in thread "main" java.lang.NullPointerException
         *   at ~~(생략)
         */
        System.out.println(obj.toString());
    }

     

    반응형

    'Java' 카테고리의 다른 글

    Generic  (0) 2020.01.07
    java.lang.Math & StrictMath Class  (0) 2020.01.07
    java.lang 기본 자료형 타입 클래스  (0) 2020.01.07
    java.lang 패키지 구조  (0) 2020.01.07
    String 클래스  (0) 2020.01.06

    댓글

Designed by Tistory.