앞서 객체에 대해 공부하며 멤버 변수에 대해 알아본 적이 있다.
이번에는 '지역 변수'와 비교하여 알아보자.
참고) 객체(멤버 변수)
package kr.s16.object.thistest;
public class LocalVariable {
//멤버 변수
int b = 200;
public LocalVariable() {
int a = 300;//지역 변수
int c = 500;
System.out.println("a: " + a);//지역 변수
System.out.println("c : " + c);//지역 변수
}
public void make() {
//지역 변수
int a = 100;
System.out.println("a : " + a);//지역 변수
System.out.println("b : " + b);//멤버 변수
}
public static void main(String[] args) {
for(int i=1;i<=5;i++) {//제어문 블럭 안의 지역 변수
System.out.println(i);
}
System.out.println("================");
//System.out.println(i);
for(int i=1;i<=10;i++) {
System.out.println(i);
}
}
}
- 멤버 변수는 클래스 블럭 내에서 생성된 변수를 말한다.
- 지역 변수는 메서드, 생성자, 제어문 블럭 내에서 생성된 변수이며 해당 블럭이 종료되면 소멸한다.
따라서 LocalVariable 생성자에서 선언된 지역 변수 int a = 300;와 int c = 500;는 해당 생성자 내에서는 사용 가능하지만, 해당 블럭을 벗어나 호출할 경우 소멸하여 더 이상 호출이 불가하다.
① LocalVariable 생성자에서 선언한 변수 a는 지역 변수로 해당 블럭을 벗어나 소멸하였기에 make() 메서드 내에서 a라는 이름을 다시 선언하여 사용할 수 있다.
② 클래스 영역에서 선언한 변수 b는 멤버 변수이므로, make() 메서드 내에서 호출해 사용이 가능하다.
③ LocalVariable 생성자에서 선언한 변수 c는 해당 블럭을 벗어나 소멸한 상태이므로 make() 메서드 내에서 호출을 시도할 경우 호출이 불가하다.

for문 안에서 사용한 변수 i 역시 제어문 블럭 안에서만 사용 가능한 지역 변수로, 출력이 끝난후 System.out.println(i); 다시 호출하려고 시도하면 소멸해서 호출이 불가하다.
따라서 그 다음 for문에서 변수 i를 다시 사용해도 충돌이 일어나지 않는다.