[Java] System.out.println을 사용하면 안되는 이유

개요

흔히 자바에서 간단하게 로그를 찍을 때, System.out.println()을 사용한다. 하지만 실제 운영상의 소스 코드로 배포를 할 때는 Sysout보다는 로깅 프레임워크를 사용한다. 아주 당연하게. 오늘은 System.out.println을 자바 소스 코드 상에서 사용하면 안되는 이유에 대해서 알아보자.

Sysout vs 로깅 프레임워크의 차이에 대해서 알아보자.

먼저 System.out.println()은 IO operation이기 때문에 여러분의 애플리케이션이 print메서드를 통해서 결과물을 출력할 때 까지 기다리게 된다.

    /**
     * Prints a String and then terminate the line.  This method behaves as
     * though it invokes <code>{@link #print(String)}</code> and then
     * <code>{@link #println()}</code>.
     *
     * @param x  The <code>String</code> to be printed.
     */
    public void println(String x) {
        synchronized (this) {
            print(x);
            newLine();
        }
    }

실제로 코드를 까보면, 문자를 출력하는 println메서드에 synchronized키워드가 있는 것을 볼 수 있다. synchronized 키워드는 하나의 객체에서 하나의 스레드만 (동일시간에) 실행됨을 의미한다. 그러니까 하나의 스레드만 그 해당 시간을 점유해버린다.

로깅 프레임 워크의 장점?

연관 포스트