basicJAVA/5. Oop

201022 MyMathTest

unemo 2020. 10. 22. 19:52
반응형

일단 이런 구조임

package e_oop;


public class MyMathTest {
	public static void main(String[] args) {
		
		MyMath.add1();
		
		int result1 = MyMath.add2();  
		
		MyMath mm = new MyMath();
		
		mm.add3(10);
		
		mm.add4(10,10);
		
		int result2 = mm.add5(10,10); 
	}
}


class MyMath{
	
	int a = 10;
	
	int b = 20;
	
	static int c = 30;
	
	static int d = 40;
	
	static void add1(){ 
		int hap = c + d ;
		System.out.println("add1:" + hap);
//		return;
	}
	
	static int add2(){
		int hap = MyMath.c + MyMath.d;
		return hap;
	}
	
	void add3(int num){
		MyMath mm = new MyMath();
		int hap = mm.a + mm.b + num;
		System.out.println("add3:" + hap);
	}
	
	void add4(int num1, int num2){
		int hap = num1 + num2;
		System.out.println("add4:" + hap);
	}
	
	int add5(int num1, int num2){//중요+++++++매개변수는 지역변수의 일종임+++++++
		int hap = num1 + num2;
		return hap;
	}
	

	
	
}

 

 

public class MyMathTest {

MyMathTest 가 메소드아레아에 로드됨 ( 클래스메소드인 main() 도 같이)

 

public static void main(String[] args) {

콜스택에 main()가 호출된다.

 

MyMath.add1();

매스아레아에 MyMath 클래스가 로드됨 ( static이 붙은 클래스 변수 int c = 30, int d = 40, 클래스메소드 add1() add2()도 같이). MyMath 클래스의 add1()메소드가 호출되어 콜스택의 main() 위에 쌓는다.

syso으로 hap의 값을 출력하고, 콜스택의 add1()을 지운다.

C,D는 같은 '영역'안에있기떄문에  

 

int result1 = MyMath.add2();

콜스택에 메인메소드안에 지역변수 result1은 선언하고, 메소드아레아에 있는 add2 메소드를 콜스택에 호출한다.

add2()는 int hap을 일단 콜스택의 add2() 에 선언하고, 그 리턴값인 hap을 메인메소드의 지역변수 result2에 hap이 담긴다. 끝까지 진행해서 퇴근하는게 아니고 리턴을 만나서 퇴근하는거임 add2()도 콜스택에서 지운다.

 

MyMath mm = new MyMath();
		
		mm.add3(10);

인스턴스 메소드인 add3()를 불러야하기때문에 먼저 인스턴스화해준다.

MyMath클래스는 이미 매소드마레아에 올라와잇고, 그 참조변수 mm은 지역변수이기도 하므로 콜스택의 main()에 선언해주고, new는 힙영역에 인스턴스를 만들어주고 거기에 MyMath의 인스턴스변수인 int a =10, int b = 20, 인스턴스메소드 add3(num), add4(num1,num2), add5(num1,num2)를 담아주고 그 mm의 주소값을 콜스택의 메인메소드안에있는 참조변수 mm에 담는다.

 

mm 인스턴스의 주소로 가서 add3( num = 10) (콜스택에적어줌)를 호출하고 인자도 가지고 콜스택의 main()메소드위에 쌓는다.

add3() 의 int hap은 콜스택의 add3()영역에 선언하고, 매서드도착하면는 매개변수부터 생각!! 매개변수는 지역변수니까 콜스태에 선언 num=10이므로 a와 b를 같이 더하면 hap= 40 (콜스택에 적어줌)이 되고 이값을 출력한다.  콜스택에서 add3()는 지운다

 

 

mm.add4(10,10);

mm으로 add4(num1, num2)를 호출해서 콜스택에 담고, 인자값 10과 10을 가져갔으므로 대입해서  계산하면 int hap(add4()의 콜스택영역에 선언한다)는 20이 된다. 이 값을 출력하고 콜스택에서 add4()는 지운다

 

int result2 = mm.add5(10,10);

메인메소드의 지역변수 result2를 main 메소드에 선언하고, mm 인스턴스의 주소에 찾아가서 add5(num1, num2)를 호출하여 콜스택에 쌓고, 인자값 10과 10을 대입한다. 지역변수 int hap을 add5()의 콜스택에 선언하고, 리턴값 20이 hap에 대입된다.

add5()를 콜스텍에서 지운다.

 

 

NUM1과 NUM2값을 먼저 지역변수에서 찾고, 그 다음 MM에서 그다음 클래스에서 찾는것

반응형

'basicJAVA > 5. Oop' 카테고리의 다른 글

201023 매서드의 종류, 클래스멤버와 인스턴스 멤버간 참조호출  (0) 2020.10.23
InterVari  (0) 2020.10.23
201022 METHOD  (0) 2020.10.22
20201022 CardTest  (0) 2020.10.22
201021 OOP_01, TvTest  (0) 2020.10.21