코드 그라데이션

Day11 메소드 예제(2) 나름대로 해석 본문

Java/Mega-Method

Day11 메소드 예제(2) 나름대로 해석

완벽한 장면 2023. 3. 30. 00:34

아마 static 변수와 값 변화에 대해 알려주시고 싶었던 듯한 예제

 

원래 코드

package Day11;


public class MethodTest1 {

	static int a = 10; //전역변수
	
	static void abc() {
		int a = 30;
		a = 20;
		// 4. 안주고 안받고 인데, 이 메소드 내부에 출력문 자체가 없으므로 아예 무출력
	}
	
	static void kor() {
		System.out.println(a);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 20;
		abc(); // 별 의미가 없음. 리턴값이 없으니 출력 자체도 안 됨.
		System.out.println(a);
		kor();
	}

}

 

실행 결과

20
10

 

 

-------------------------

 

살짝 바꾼 코드

package Day11;


public class MethodTest1 {

	static int a = 10; //전역변수
	
	static void abc() {
		int a = 30;
		a = 20;
		// 4. 안주고 안받고 인데, 이 메소드 내부에 출력문 자체가 없으므로 아예 무출력
	}
	
	static void kor() {
		System.out.println(a);
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		a = 20; // 요기!!!!!!!!!!!!!!
		abc(); // 별 의미가 없음. 리턴값이 없으니 출력 자체도 안 됨.
		System.out.println(a);
		kor();
	}

}

 

실행 결과

20
20

 

-------------------------

 

출력 결과 차이에 대한 나름대로의 해석

먼저, 첫 번째 코드나 두 번째 코드나 모두 static int a; 이 전역변수로 설정되어 있는 것은 동일

그런데, 첫 번째 코드에서는 main 메서드에서 int a 가 20으로 또 정의가 되어 있다.

 

그래서 main 메소드의 System.out.println(a); 은 가장 가까운 a의 값을 출력하므로 20이 출력된다.

 

kor() 메소드는 static 변수, 10을 그대로 가져오므로.10이 출력된다.

그런데 void여서 리턴 값도 없고, 파라미터도 없기 때문에, 역시 메서드 내부에 있는 출력문장이 그대로 출력된다.

그래서 kor(); 은 10이 출력됨.

 

-------------

 

두 번째 코드는

static이 10이 main문 들어와서 저장되어 있는 a=20; 에 의해서 20으로 변경된다.

그래서 아래 있는 System.out.println(a); 은 20이 출력된다.

 

static이 20으로 변경되었으므로, 전역변수를 사용하는 kor() 메소드의 println(a) 역시 20이 출력된다.

728x90
Comments