코드 그라데이션

Day11. 메소드 함수 호출 궁금증 해결 본문

Java/Mega

Day11. 메소드 함수 호출 궁금증 해결

완벽한 장면 2023. 3. 28. 21:57

첫 번째 코드

package Day11;


public class MethodTest1 {

	static int a = 10;
	
	static void abc() {
		int a = 30;
		a = 20;
	}
	
	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_2 {

	static int a = 10;
	
	static void abc() {
		int a = 30;
		a = 20;
	}
	
	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

 

 

첫 번째 코드에서 abc() 메서드 안에서 int a = 30; 라인은

abc() 메서드 내에서만 사용되는 지역 변수 a를 선언합니다.

 

그리고 a = 20; 라인에서는 이 지역 변수 a에 20을 할당합니다.

 

이는 abc() 메서드 안에서만 유효하며, 메서드 실행이 끝나면 사라집니다.

 

main() 메서드 안에서 int a = 20; 라인은

main() 메서드 안에서만 사용되는 지역 변수 a를 선언합니다.

 

이 변수 a는 abc() 메서드에서 사용되는 변수 a와는 별개입니다.

 

 

 

kor() 메서드 안에서 System.out.println(a); 라인은 클래스 변수 a를 참조합니다.

클래스 변수 a는 static int a = 10; 라인에서 선언되었으며, 클래스 내에서 어디에서든 참조할 수 있습니다.

그리고 클래스 변수 a의 값은 10입니다.

 

따라서 첫 번째 코드에서 main() 메서드 안에서 선언한 지역 변수 a는 abc() 메서드 안에서만 유효하기 때문에,

abc() 메서드에서 a = 20;을 실행해도 main() 메서드 안에서 선언한 a의 값은 바뀌지 않습니다.

 

 

 

그래서 첫 번째 코드에서 System.out.println(a); 라인에서는

main() 메서드 안에서 선언한 a의 값인 20이 출력되지만,

kor() 메서드에서는 클래스 변수 a의 값인 10이 출력됩니다.

 

 

 

 

반면, 두 번째 코드에서 a = 20; 라인은 클래스 변수 a에 20을 할당합니다.

이로 인해 kor() 메서드에서 System.out.println(a); 라인에서

클래스 변수 a의 값이 20으로 바뀌어 20이 출력됩니다.

 

따라서 두 번째 코드에서는 콘솔에 20 20이 찍힙니다.

728x90
Comments