밍 석
밍석의 devlog
밍 석
  • 분류 전체보기 (58)
    • 글쓰기(=writing) (8)
      • 어떤 개발자가 되고 싶은가? (1)
      • 깊이 학습 한다는 것은? (1)
      • 23년 생각 정리 + (회고) (1)
    • TIL (=Today I Learned) (0)
    • 프로젝트(project) (2)
      • ERD 설계 느낀 점 (1)
      • AWS 배포 느낀 점 (1)
    • aws (8)
    • Java (28)
    • Spring (0)
    • Linux (1)
    • git (3)
    • ETC (4)
      • h2 DB 설치 (0)
      • 우아한 테크코스 (백엔드) (4)
      • IntelliJ IDEA (0)
    • project 환경 세팅 (0)
    • Dev Book Review (0)
      • git 레포로 관리 -> 링크 (0)
    • 기록하고 싶은 글 (2)
전체 방문자
오늘
어제

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
밍 석

개발과 관련된 내용을 기록하는 블로그

System.out.println() 내부 동작원리
Java

System.out.println() 내부 동작원리

2023. 11. 6. 13:43

📝느낀 점

평소엔 그냥 콘솔에 출력만 했었지, 정확히 어떤 내부 동작인지 모르고 사용해 왔다.

그렇기에, 이번 기회에 내부 동작이 어떤지? 알게되어 좀 더 명확해 졌다는 생각이 들었다.

 

out 이라는 클래스 변수와 println()이라는 메서드 모두 static으로선언되어 있기 때문에,

나는 별도의 클래스 객체 생성 필요 없이 사용할 수 있었던 것이다.

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

 

 

System은 java.lang 패키지에 속하는 클래스다.

java.lang 패키지는 컴파일 단계에서 암묵적으로 import java.lang.* 를 추가 해준다.

  • 따라서, java.lang 패키지의 클래스들은 import를 하지 않아도 된다.

println() 메서드는 PrintStream 클래스의 메서드이지만 코드 어디에도 PrintStream 이라는 이름은 찾을 수 없다.

"System.out.println()" 대신 "PrintStream.println()"을 사용하면 컴파일 에러가 발생한다.

 

 

println() 메서드는 인스턴스 메서드이다

클래스를 통해 외부로 호출할 수 없다.

public void println(String x) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

여기서 만약 println() 메서드를 사용하려면 java.io 패키지를 import하고

PrintStream 클래스에 대한 객체를 생성해야 한다.

 

그러나 System.out은 import 조차 없이 println() 메서드를 호출한다.

 

 

out

public final class System {
    public static final PrintStream out = null;
    
    ...
}

out은 → System 클래스의 “static PrintStream” 타입으로

되어 있는 변수 이름이다. → 즉, out은 PrintStream 타입이다.

 

그러므로, println()이라는 메서드는 PrintStream 클래스에 선언되어 있으며 static 메서드이다.

 

 

 

 

 

 

 

Reference : https://velog.io/@zionhann/System.out.println-Deep-Dive

저작자표시 (새창열림)

'Java' 카테고리의 다른 글

인터페이스는 상수 필드만 선언이 가능한 이유는?  (0) 2023.11.06
왜 모든 클래스는 Object 클래스의 상속을 받을까?  (0) 2023.11.06
실행을 위해서 왜 main 메서드가 필요한 것인가요?  (0) 2023.11.06
자바 네이밍 규칙  (0) 2022.12.13
Java Style Guide  (0) 2022.12.13
    밍 석
    밍 석
    밍 석

    티스토리툴바