JAVA

Java에서 클래스, 객체, 변수, 그리고 System.out.println() 완전 정리

싸블양 2025. 7. 24. 01:37

System.out.println()에서

System.out은 PrintStream 객체이고,
그 객체의 println() 메서드를 호출하는 겁니다.

 

PrintStream객체라면서 왜 System.out인가?
-> out이 선언된 위치가 중요

public final class System { public static final PrintStream out = ...; }
  • out은 System 클래스의 static 변수
  • 타입이 PrintStream이라는 뜻이지, PrintStream 클래스 안에 정의된 게 아니다.

그러니까, PrintStream.out는 ❌틀린표현이다
PrintStream 클래스 안에는 out이라는 static 변수가 없음

 

✅ System 클래스 안에 out이라는 static 변수가 존재 하기때문에 System.out이라고 써야한다

 
변수 뒤에 .메서드() 붙이는 이유

 

"변수는 그냥 값 담는 건데, 어떻게 뒤에 메서드가 붙어요?"
객체 뒤에 메서드가 붙어야하는거아닌가요?

 

→ 변수에는 객체가 들어 있을 수 있고,
그 객체는 메서드를 가질 수 있기 때문입니다.

Scanner sc = new Scanner(System.in); sc.nextLine(); // 변수 sc 안의 객체가 메서드를 실행
  • sc는 변수지만 그 안에 Scanner 객체가 있으므로
  • sc.nextLine()이 되는 거예요.

System.out.println()도 같은 원리입니다.

 

 

또한ystem.out.println()

 

System.out은 PrintStream 객체이고,

그 객체의 println() 메서드를 호출하는 겁니다.

 

PrintStream객체라면서 왜 System.out인가?

-> out이 선언된 위치가 중요

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

out은 System 클래스의 static 변수

타입이 PrintStream이라는 뜻이지, PrintStream 클래스 안에 정의된 게 아니다.

그러니까,

 

PrintStream.out ❌ PrintStream 클래스 안에는 out이라는 static 변수가 없음

System.out ✅ System 클래스 안에 out이라는 static 변수가 존재

변수 뒤에 .메서드() 붙이는 이유

 

 

"변수는 그냥 값 담는 건데, 어떻게 뒤에 메서드가 붙어요?"

객체 뒤에 메서드가 붙어야하는거아닌가요?

 

→ 변수에는 객체가 들어 있을 수 있고,

그 객체는 메서드를 가질 수 있기 때문입니다.

 

Scanner sc = new Scanner(System.in); sc.nextLine(); // 변수 sc 안의 객체가 메서드를 실행

sc는 변수지만 그 안에 Scanner 객체가 있으므로

sc.nextLine()이 되는 거예요.

System.out.println()도 같은 원리입니다.

 

또한

그렇다면 왜 "변수에 객체가 들어 있다"는 표현을 쓸까? 자바에서는 실제 객체는 힙(heap) 메모리에 따로 존재하고,
변수는 그 객체의 위치만 저장하고 있기 때문에 프로그래머 입장에서 흔히 이렇게 말한다.

"변수는 객체를 담고 있다"
(정확히는 객체의 참조값(주소)을 담고 있음)

이 표현은:

  • primitive 변수랑 구분하기 쉽고
  • 객체는 값이 아니라 참조라는 걸 알려주기 위해 쓴다

'JAVA' 카테고리의 다른 글

인스턴스 변수를 private으로 해야하는 이유가 뭘까  (0) 2025.08.25
Hashmap in java (2)  (0) 2025.07.29
static이란 무엇일까?  (0) 2025.07.14
java에서 . 이란?  (0) 2025.07.11
스택 메모리 (Stack Memory)  (0) 2025.07.08