[Java 기초] 변수의 사용가능 범위는 어디까지일까?
안녕하세요~
이번 시간에는 변수의 종류에 따라 달라지는 범위에 대해 알아보려고 하는데요.
바로 예시코드부터 보시죠!
중괄호 영역에 따라 달라지는 변수의 개념
class Math {
int num = 10;
static int number = 100;
void check() {
int num = 20;
System.out.println("전역변수 num 값 : " + this.num);
System.out.println("지역변수 num 값 : " + num);
}
void plus(int a) {
System.out.println("입력받은 숫자 값 : " + a);
System.out.println("num에 더한 값 : " + (num+a));
}
}
public class Main {
public static void main(String[] args) {
Math m1 = new Math();
Math m2 = new Math();
m1.check();
m1.plus(10);
System.out.println();
m2.check();
m2.plus(20);
System.out.println();
System.out.println("m1의 정적변수 : "+m1.number);
System.out.println("m2의 정적변수 : "+m2.number);
System.out.println();
Math.number = 30;
System.out.println("정적변수를 30으로 바꾼 후");
System.out.println("m1의 정적변수 : "+m1.number);
System.out.println("m2의 정적변수 : "+m2.number);
}
}
Math 객체를 활용해 다양한 변수를 출력하는 코드.
오늘의 핵심 키워드
1. 클래스 영역에 선언되는 전역변수는 선언된 영역 전체에서 사용 가능하다.
2. 조건문, 반복문, 메소드 안에 선언되는 지역변수는 그 내부영역에서만 사용 가능하다.
3. 앞에 static이 붙는 정적변수는 가장 먼저 메모리가 올라가 모든 객체가 공용으로 사용한다. ※ 객체 생성 필요 없이 사용 가능하다.
이클립스 실행화면
** m1 객체
전역변수 num = 10
check메소드 num = 20
main메소드에서 호출할 때 넣어준 매개변수 = 10
전역변수 num에 매개변수를 더해준 값 = 30
** m2 객체
전역변수 num = 10
check메소드 num = 20
main메소드에서 호출할 때 넣어준 매개변수 = 20
전역변수 num에 매개변수를 더해준 값 = 30
m1의 정적변수 number = 100
m2의 정적변수 number = 100
-- 정적변수 number를 30으로 바꾸고 나서
m1의 정적변수 number = 30
m2의 정적변수 number = 30
정적변수 number는 메모리에 고정적으로 존재해 모든 객체가 공유하여 하나의 객체에서 값을 변경해도 모든 객체가 동일하게 변경되는 것을 확인할 수 있습니다.
참고로 정적변수 number는 객체 생성 필요 없이 사용가능하기 때문에 예시코드처럼 앞에 클래스 이름만 붙여서 Math.number = 30 ; 으로도 사용할 수 있습니다.
꼭 봐야되는 마무리 꿀팁!
- 전체 영역에서 자주 사용하는 변수는 전역변수로 선언하기!
- 모든 객체에서 공통으로 사용하는 변수는 정적변수로 선언하기!
- 한정적으로 반복문, 조건문, 메소드 안에서만 사용하는 변수는 지역변수로 선언하기!
▲영상으로 한번 더 복습하세요 :)