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 접근가능 접근가능 접근가능 접근가능