객체지향문법

클래스 메소드는 인스턴스를 생성하지 않아도 사용 가능!=인스턴스 생성 안해도 메모리에 올라가있다.
대부분의 static한 메소드 형태 : 클래스명.메소드명(); but 객체.메소드명();도 가능 🚨static이 아니면, 객체.메소드명();
ex.메인 메소드 : VendingMachine.printVersion();
VendingMachine 클래스 메소드
public static void printVersion(){
System.out.println("v1.0");
}
+✔ 메소드 그림 표현

1. new 연산자와 생성자를 이용하여 인스턴스를 만드는 방법
2. 클래스 로더를 이용하는 방법(프레임워크사용)
3. 메모리에 있는 인스턴스를 복제하여 만드는 바법
면접 : JYM 은 클래스를 어디서 찾습니까?
A. 현재 경로에서 찾는다.
이해하기
javac Hello.java 는 Hello를 컴파일
-> Hello.java랑 Hello.class 파일 생성됨
-> java Hello 하면 Hello 클래스 실행
- 틀린답) 현재 폴더에서 찾는다.
- 정답) CLASSPATH 경로에서 Hello 클래스를 찾아서 실행한다. CLASSPATH=.이라고 잡혀있다고 생각
VendingMachine클래스와 VendingMachineMain 클래스


java VendingMachineMain을 실행하면 CLASSPATH에서 VendingMAchineMAin클래스를 찾는다.
VendingMachineMain클래스를 JVM은 읽어 들이고 읽어들인 클래스 정보를 PERM이라는 메모리 영역에 저장 ( 인스턴스가 아닌 클래스 정보를 저장!)
클래스 정보가 PERM영역에 올라가면, JVM은 해당 클래스가 어떤 static메소드를 가지고 있는지 인스턴스 메소드를 가지고 있는지 모두 알게 됨
JVM은 프로그램 시작점인 main 메소드를 먼저 찾고, 실행함
Java Stack이라고 불리는 메모리 영역에 실행된 메소드 정보를 넣어줌
main 메소드가 실행되면 Heap 메모리에 String 배열 인스턴스가 만들어지고 이 인스턴스를 args변수가 참조한다.
JVM은 main의 3번째 줄 [ VendingMachine.printVetsion(); ] 을 만나면(main스택 카운트 3) printVersion()메소드는 static메소드이기 때문에 실행 가능 판단하고 실행함
printVersion()메소드가 실행 후 종료되면 해당 스택 엔트리는 자바 스택에서 제거됨.
main 스택 엔트리 4번 째 줄을 만나면 그 줄 실행 -> java Stack에서 main 스택 엔트리로 돌아오고 (main스택 카운트4) VendingMachine 인스턴스도 Heap 메모리에 생성되고, 메인 스택 엔트리에 vm1 생성되고 vm1변수가 해당 Heap을 참조
이런식으로 main 끝까지 가면
+메소드안에 선언된 변수를 지역 변수라 하고, 지역 변수는 해당 메소드가 실행될 때 생성되고 종료될 때 사라진다.
메소드안에 선언된 변수를 지역 변수라 하고, 지역 변수는 해당 메소드가 실행될 때 생성되고 종료될 때 사라진다.
같은 메소드를 동시에 열 번 호출한다면 그 메소드 안의 지역 변수는 각각 다른 영역에 저장되어 사용된다. 동시에라는 개념은 뒤의 스레드에 나오는 개념
하나의 서버는 여러 개의 요청을 동시에 받아들여 실행할 수 있어야한다.
같은 메소드도 동시에 여러 번 호출될 수 있는데 이 경우, 메소드 안에서 선언된 변수들은 각각 다른 영역에 저장된다는 것 기억
줄여서
메소드안에 선언된 변수를 지역 변수라 하고, 지역 변수는 해당 메소드가 실행될 때 생성되고 종료될 때 사라진다.
동시에 메소드가 호출되도 문제 없다