코드 그라데이션
Day11. 메소드 함수 호출 궁금증 해결 본문
첫 번째 코드
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이 찍힙니다.
'Java > Mega' 카테고리의 다른 글
[보충] 객체 지향 프로그래밍에 대한 이해 (0) | 2023.03.29 |
---|---|
Day11-1. 다차원 배열과 가변 배열 (0) | 2023.03.29 |
정방향 / 역방향 배열 배치 방법 두가지 (0) | 2023.03.28 |
배열 출력(숫자야구) i+1을 하는 이유 chat GPT (0) | 2023.03.27 |
숫자야구 배열에서 두 번째 안쪽 for문에서 조건식에 대한 질문 chat GPT (0) | 2023.03.27 |