JVM
- Java Virtual Mahine - 자바 가상 머신
- OS에 상관 없이 실행할 수 있도록 만들어주는 역할
- 메서드영역 (method Area) : 클래스, 인터페이스 관련한 정보를 저장하는 영역
- 힙 영역 (heap Area) : 설계도를 통해 만들어진 객체와 그 문자열, 배열 등이 저장되는 영역
- 스택 영역 (stack Area) : 메서드를 호출할 때마다 프레임이 생성되고, 지역변수 등도 함께 임시 저장됨. 해당 메서드가 종료되면 하나씩 사라지는 방식. LIFO 방식(Last In First Out)
static
구분 | static | non-static |
구동 시점 | 클래스가 메서드 영역에 로딩될 때 생성 | 일반 멤버변수이므로, new 키워드 쓸 때(객체 생성할 떄) 만들어짐 |
메모리 할당 | 오직 1개의 메모리 공간 할당 | 인스턴스마다 별도로 할당 |
목적 | 모든 인스턴스에 공용으로 사용할 변수 or 메서드를 정의할 떄 주로 사용 | 개별적으로 관리할 때 사용 |
접근 방법 | 클래스 이름으로 접근 Dog.age = 2; |
객체를 생성해야 접근 가능 Dog dog = new Dog(); dog.age = 2; |
★ static영역에서는 non-static 영역에 직접 접근이 불가하고
non-static 영역에서는 static 영역에 접근이 가능하다!
staitc 영역인 main 메서드에서 선언된 name은
non-static 영역인 '스태틱'클래스에서 접근이 가능.
그러나 반대로 age는 메인 메서드 영역에서 접근이 불가능하다!
접근제어자
- private : 자기 클래스에서만 접근 가능
- protected : 같은 패키지(폴더) 에서 접근 가능, 다른 패키지에서는 접근 안됨.
But 다른 패키지 클래스를 상속받았다면? 상속받은 본인 클래스로 선언하면 가능 - (default) : 제어자 입력이 없다면 default로 적용됨. 같은 패키지 에서만 접근 가능
- public : 모든 위치에서 접근 가능
동일 클래스(자기 자신) | 동일 패키지 | 다른 패키지의 하위 클래스 | 다른 패키지 | |
private | 접근가능 | 접근 불가능 | 접근 불가능 | 접근 불가능 |
default | 접근가능 | 접근가능 | 접근 불가능 | 접근 불가능 |
protected | 접근가능 | 접근가능 | 접근가능 | 접근 불가능 |
public | 접근가능 | 접근가능 | 접근가능 | 접근가능 |