
메서드는 호출 할 때만 내부가 실행된다.
m2( )는 실행이 끝나면 return 값인 “m2”로 바뀐다고 생각.
Calculator 클래스에서 매서드를 만들고 Calculator 앱에서 불러오기
package ex04;
// 계산기 클래스 = 설계도
public class Calculator {
public int add(int n1, int n2){
return n1+n2;
}
public int minus(int n1, int n2){
return n1-n2;
}
public double divide(double n1, double n2){
return n1/n2;
}
public int multi(int n1, int n2){
return n1*n2;
}
}
package ex04;
public class CalculatorApp {
public static void main(String[] args) {
Calculator cal = new Calculator(); // Calculator의 모든 함수를 메모리에 띄움
int rAdd = cal.add(50,80);
System.out.println("add: " +rAdd);
int rMinus = cal.minus(80,50);
System.out.println("minus: "+rMinus);
double rDivide = cal.divide(80,50);
System.out.println("divide: "+rDivide);
int rMulti = cal.multi(80,50);
System.out.println("multi: "+rMulti);
}
}
static이 없으면 new를 통해 불러와야 한다.(static이 있으면 상관없음)
new를 하는 순간 static이 없는 모든 값들이 heap에 저장됨
package ex04.test;
public class ScopeEx01 {
int n1 = 1; // heap 영역
static int n2 = 2;
static void m1(){ //static 영역
int n5 = 10; //stack 영역
System.out.println("m1 : "+n5); // stack 영역
}
void m2(){ // heap 영역
System.out.println("m2 : "+n1); // stack 영역 // n1에 접근하는 것은 heap이 heap에 접근
}
// 메인 시작전에 static에 n2 변수와 m1 메서드가 로드 되어 있음.
public static void main(String[] args) {
System.out.println(1);
m1();
System.out.println(2);
}
}
ScopEx01(클래스)
static (n2=2, m1(), main) → 클래스명.x
→ 어디에서든지 접근 가능하다.
heap (n1=1, m2())
→ heap 끼리는 같은 Scope 여서 접근 가능하다.
stack (n5=10)
→ 외부 접근 불가능
Scope
Scope : Stack은 Stack끼리 변수를 못찾는다.

ScopeEx01을 실행하면 JVM(Jaav Virtual Machine)에서 실행됨.
① ScopeEx01.class를 로드한다.
② static을 찾는다. (그림은 ScopeEx01만 static이 있는 상황)
③ main을 찾아서 실행한다.
- main이 실행될 때 main Queue와 main Stack이 생긴다.
- main Queue는 순차적으로 Put되고 Pop되는데 2번째 줄에서 m1을 실행하기 때문에 main Queue 2번째에 m1 Queue가 생성됨
- m1 Queue가 생성되었으므로 Stack에는 m1 Stack이 생성되고, m1 Queue가 실행된다.
- m1 Queue의 실행이 끝나면 동시에 m1 Stack도 사라진다.
- 다시 main Queue로 돌아와 3번째, 4번째 줄을 실행하고 main Queue가 종료된다.
- main Queue가 종료되어 main Stack도 사라진다.
Share article