HOWTO · Java

Java system.out.println() 메서드

이 포스트는 system.out.println() 메소드가 Java에서 어떻게 작동하는지에 대한 모든 것입니다.

이 페이지의 내용

이 튜토리얼에서는 System.out.println() 메소드가 Java에서 어떻게 작동하는지 소개하고 주제를 이해하기 위한 몇 가지 예제 코드를 나열합니다.

System.out.print()는 콘솔이나 표준 출력으로 인쇄하는 데 매우 자주 사용되는 방법입니다. 이 방법을 인쇄 라인 방법이라고도 합니다. 콘솔에 인쇄하는 것 외에도 println() 메서드는 커서를 새 줄로 이동합니다.

이 튜토리얼에서는 이 방법의 내부 작업을 이해하려고 노력할 것입니다.

System.out.println() 메서드는 무엇입니까?

  • System.out.println()은 세 부분으로 나눌 수 있습니다.
  • System은 java.lang 패키지의 마지막 클래스이며 JVM이 시작될 때 자동으로 초기화됩니다. initializeSystemClass()를 사용하여 초기화합니다.
  • System 클래스는 PrintStream 클래스의 인스턴스를 포함합니다. 이 인스턴스 변수를 out이라고 합니다. public, static 및 final 수식어로 정의됩니다.
class System {
  public static final PrintStream out;
  // More Code Below
}

PrintStream 클래스에는 print() 및 println() 메서드가 포함되어 있습니다. 이러한 메서드는 오버로드됩니다.

class PrintStream {
  public void print(argument) {
    // implementation
  }
  public void println() {
    // implementation
  }
  // Overloaded print() and println() methods below
}

따라서 System.out은 PrintStream 클래스의 out 인스턴스 변수를 제공합니다. 그런 다음 이 인스턴스 변수에서 print() 또는 println() 메서드를 호출할 수 있습니다.

System.out.println()은 어떻게 작동합니까?

  • PrintStream 클래스에는 오버로드된 print() 및 println() 메서드가 여러 개 포함되어 있습니다. 허용되는 매개변수 유형이 다릅니다.
  • 모두 반환 유형이 void입니다.
  • 모든 기본 유형에 대해 오버로드된 메소드가 존재합니다.
  • 또한 문자열을 인쇄하는 오버로드된 메서드와 개체에 대한 또 다른 메서드가 포함되어 있습니다.

아래 코드는 오버로드된 println() 메서드의 작동을 보여줍니다.

public class PrintDemo {
  public static void main(String args[]) {
    int i = 10;
    short s = 10;
    long l = 10;
    char c = 'A';
    char[] charArr = {'A', 'B', 'C'};
    boolean bool = true;
    double d = 10.0;
    float f = 10.0f;
    String str = "hello";
    Object o = new Object();

    System.out.println(); // terminate the current line
    System.out.println(i); // print integer
    System.out.println(s); // print short
    System.out.println(l); // print long
    System.out.println(c); // print char
    System.out.println(charArr); // print char array
    System.out.println(bool); // print boolean
    System.out.println(d); // print double
    System.out.println(f); // print float
    System.out.println(str); // print String
    System.out.println(o); // print Object
  }
}

출력:

10
10
10
A
ABC
true
10.0
10.0
hello
java.lang.Object@433c675d

println() 메소드에 전달된 인수

  • 초심자는 print() 및 println() 메서드가 다양한 인수(varargs)를 사용한다고 생각할 수 있지만 그렇지 않습니다.
  • 예를 들어 아래 코드에서는 정수, 문자열 및 문자를 인쇄하려고 합니다.
public class PrintDemo {
  public static void main(String args[]) {
    int i = 10;
    String s = "hello";
    char c = 'O';
    System.out.println(i + s + c);
  }
}

출력:

10helloO
  • 그러나 우리는 세 가지 다른 인수를 전달하지 않습니다. 쉼표는 메서드의 인수를 구분합니다.
  • 대신 println() 메서드에서 + 연산자를 사용하여 함께 연결됩니다.
  • 문자열과 함께 사용되는 + 연산자는 문자열을 연결하고 문자열을 반환합니다.
  • 위의 코드에서 정수는 먼저 문자열과 연결되고 결과 문자열은 char 변수와 다시 연결됩니다.

주목해야 할 또 다른 사항은 메서드에 전달된 인수가 왼쪽에서 오른쪽으로 평가된다는 것입니다. 따라서 전달된 처음 두 변수가 정수이면 일반 산술 덧셈이 발생하고 덧셈 결과가 문자열과 연결됩니다.

public class PrintDemo {
  public static void main(String args[]) {
    System.out.println(10 + 10 + "hello"); // first integer addition and then string concatenation
  }
}

출력:

20hello

그러나 문자열 뒤에 두 개의 정수가 더 있으면 문자열 연결이 발생합니다.

public class PrintDemo {
  public static void main(String args[]) {
    System.out.println(10 + 10 + "hello" + 1 + 1); // 20hello11 not 20hello2
  }
}

출력:

20hello11

아래에 표시된 규칙을 왼쪽에서 오른쪽으로 적용하여 출력을 계산할 수 있습니다. 문자열이 없으면 일반 산술 덧셈이 수행됩니다.

(any data type + string) = (string + any data type) = (concatenated string)

print() 및 println() 메소드는 인수에서 toString() 메소드를 암시적으로 호출합니다. 인수를 문자열로 변환합니다. 이것은 특정 방식으로 사용자 정의 클래스 인스턴스를 인쇄하려는 경우 매우 유용합니다.

다른 형식으로 객체를 인쇄하기 위해 클래스의 toString() 메서드를 재정의할 수 있습니다. 다음 예제는 이를 보여줍니다.

예: toString() 메서드를 재정의하지 않음.

class Demo {
  String field1;
  String field2;

  Demo(String f1, String f2) {
    this.field1 = f1;
    this.field2 = f2;
  }
}
public class PrintDemo {
  public static void main(String args[]) {
    Demo d = new Demo("f1", "f2");
    System.out.print(d);
  }
}

출력:

Demo@433c675d

예: toString() 메서드를 재정의한 후.

class Demo {
  String field1;
  String field2;
  Demo(String f1, String f2) {
    this.field1 = f1;
    this.field2 = f2;
  }
  @Override
  public String toString() {
    return field1 + " " + field2;
  }
}
public class PrintDemo {
  public static void main(String args[]) {
    Demo d = new Demo("f1", "f2");
    System.out.print(d);
  }
}

출력:

f1 f2

요약

print() 및 println() 메소드는 PrintStream 클래스의 일부입니다. System.out 인스턴스 변수를 사용하여 액세스합니다. 이러한 메서드는 다양한 인수 유형을 처리하기 위해 오버로드됩니다. 이러한 메서드는 가변 개수의 인수를 사용하지 않는다는 점을 기억하십시오. 이 튜토리얼에서는 System.out.print() 및 System.out.println() 메서드가 어떻게 작동하는지 배웠습니다.