728x90
왜 메인(main) 클래스는 객체 생성 없이 실행이 될까?
main클래스 동작 방식
① JVM이 실행할 클래스를 찾는다.
② static 키워드가 붙어있는 멤버들을 정해진 메모리(static-zone) 위치에 한번 자동으로 로딩 한다.
→ static멤버들은 클래스를 사용하는 시점에서 딱 한번 메모리에 로딩된다는 점이 중요하다.
→ 여기서는 main() 메서드가 static 이기 때문에 메모리에 자동으로 로딩 한다.
③ JVM이 static-zone에서 main()메서드를 호출한다.
④ 호출된 메서드를 Call Stack Frame Area(Stack Area)에 push(기계어코드를 넣고) 한 뒤 동작을 시작한다
Call Stack Frame Area(Stack Area)란?
- 메서드가 호출되면 호출된 기계어코드가 push되고 실행되는 메모리공간
- 현재 프로그램이 실행되고 있는 상태를 파악할 수 있다.
- LIFO(Last-In-First-Out) 구조이다.
=> Static은 클래스를 사용하는 시점에서 딱 한번 메모리에 로딩하기 위해서 사용하는 키워드이다!
none-static 메서드 접근하기
같은 메모리에 올라와 있지 않기 때문에 아래와 같이는 접근할 수 없다.
아래와 같이 객체를 생성해서 메모리에 로딩 시켜야 한다.
- static 멤버접근 방법
- static 멤버는 클래스를 사용하는 시점에서 자동으로 static-zone에 로딩된다. 따라서 new를 이용해서 객체를 생성할 필요가 없다.
- 클래스이름.호출메서드
- none-static 멤버접근 방법
- 객체를 생성하여 접근
728x90
'Backend > JAVA' 카테고리의 다른 글
[패캠/JAVA] 자바 상속 (0) | 2023.08.08 |
---|---|
[패캠/JAVA] JVM 메모리 모델 (0) | 2023.08.01 |
[패캠/JAVA] VO(DTO)클래스 잘 설계하기 (0) | 2023.08.01 |
[패캠/JAVA] 자바 패키지(Package) (0) | 2023.07.31 |
[패캠/JAVA] 객체 접근 권한 (0) | 2023.07.25 |