1. Scope란?
변수가 어디서부터 어디까지 접근 가능한지를 결정하는 규칙. 영역을 뜻함
* 로드 : 메모리로 끌고 왔다.
만약, 프로젝트에 파일이 100개가 있으면 그 파일 100개를 다 로드함.
즉, 100개 파일에 있는 모든 static들이 클래스 별로 나뉘어져서 메모리에 올라가는것
2. Scope 예시
2-1. static이 존재
m1 메소드에 있는 n1은 9번 라인에 있는 n1 = 10을 뜻한다.
* m1 메소드는 static에 띄워져 있으니까, (=main 시작 전에 메모리에 떠있으니까)
heap에 띄우지 않고 바로 부를 수 있다. (ScopeEx01 se = new ScopeEx01(); 이거 안하고)
* static이 있는 애들은 jvm이 main 실행 전에 딱 한번만 띄울 수 있음.
그 외에 내가 띄울 수 있는 방법은 없음.
* static이 없는 애들은 수기로 heap에 띄워라
2-2. static이 없음
5번 라인에 int n1 = 1; 이라고 선언되어 있는데, m1메소드에선 n1을 불러오지 못한다. why? m1은 static이 붙어있다. 즉, main 시작 전에 호출 당해서 메모리에 떳는데, 5번 라인 n1은 static이 아니라서 못따라왔다. 즉, m1 메소드는 n1 변수가 없는 상태로 혼자 메모리에 뜬 것. 만약 n1이 아니라 n2를 호출했었다면, n2는 static이기 때문에 호출이 가능하다.
2-3. 정리
* static들은 일심동체. 같이 static을 달고 있으니까 쟤가 뜨면 나도 뜬거다. * static이 붙지 않은 m2 메소드 같은 경우엔, 우선 heap에 띄운 후에 사용해야하는데, ScopeEx01 se = new ScopeEx01(); 을 한 상태라면 int n1 = 1;도 메모리에 함께 떠 있는 상태란 뜻이다. (=변수 사용 가능. 같은 heap) 그래서! m1은 10 , m2는 1이 출력된다. (scope 때문에!)
Share article