///////
Search
☘️

클래스 메소드

Static 메소드

static 메소드에서 인스턴스 변수가 올 수 없는 이유 ?

class AAA { int num = 0; static void addNum(int n) { num += n; // ✨ 컴파일 오류 } }
Java
복사
static이 붙은 메서드는 인스턴스 생성 없이 호출 가능한 반면, 인스턴스 변수는 인스턴스를 생성해야만 만들어 지기 때문에 static이 붙은 메서드에서 인스턴스 변수의 사용을 허용하지 않음.

static 메모리

System.out.println 과 out 과 pirntln의 정체는?

java.lang.System.out.println(...);
System은 java.lang 패키지에 묶여 있는 클래스의 이름 그러나 컴파일러가 다음 문장을 삽입해 주므로 java.lang을 생략할 수 있다. import java.lang.*;
System.out.println(...);
out은 클래스 System의 이름을 통해 접근하므로, 이는 System 클래스의 클래스 변수 이름임을 유추할 수 있다.
System.out.println(...);
println은 out이 참조하는 인스턴스의 메서드이다.

main 메소드가 public이고 static인 이유는?

public static void main(String[] args)
static인 이유! 인스턴스 생성과 관계없이 제일 먼저 호출되는 메서드이다.
public static void main(String[] args)
public인 이유! main 메서드의 호출 명령은 외부로부터 시작되는 명령이다. 단순히 일종의 약속으로 이해해도 괜찮다.

참고) String[] args가 들어가는 이유는?

public static void main(String[] args)
main은 외부 값을 받아들여 동작시켜야 하는 경우가 있음. 따라서 기본적으로 외부 값을 String[] args를 받게끔 약속되어 있다.

JVM에서 메모리 공간

Method Area

JVM은 해당 클래스 파일(*.class)을 읽어 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다
스태틱 정보를 먼저 읽고 메모리에 올린다
Main 메서드가 종료될 때 Method 메모리 공간이 모두 사라진다

Call Stack Area

메서드 작업에 필요한 메모리 공간을 제공하는 역할
메서드가 호출될 때, 호출에 대한 메모리가 할당되며, 메서드가 작업을 수행하는 동안 지역변수들의 연산과 결과 등을 저장한다
메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비워진다
제일 먼저 main 메서드를 찾는다
Stack 이므로 메모리 할당과 제거 순서는 후입선출이다.
호출 스택의 변화

Heap Area

프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다
Main 메서드가 종료될 때 Heap 메모리 공간이 모두 사라진다