오늘은 자바의 변수에 대해 포스팅하려 합니다. 포트폴리오를 작성하다 보면 변수의 스코프와 라이프 타임은 상당히 중요하다고 생각합니다. 그래서 이번 기회에 정리해보려고 합니다!
자바의 변수 종류부터 알아보겠습니다.
{}
안에서만 사용가능하다.int a; // 인스턴스 변수
static int b; // 클래스 변수
public void method(){
int c = 0; // 로컬 변수
...
}
public void method(int a){...} //파라미터
Foo foo = new Foo(); // 여기서 foo가 참조 변수가 된다.
Foo foo = new Foo();
Foo(타입)@214c265e(해시코드)
👉
기본형 타입
은 그 값이 변수에 직접 저장되는 반면,참조 타입
은 변수에 객체의 참조 값을 저장합니다.
- 참조 값은 heap에 저장이 되고 그것을 가리키는 참조 변수는 stack에 저장됩니다.
👉 라이프 타임 : 인스턴스가 생성됐을 때 생성되어 객체가 메모리에 남아있을 때까지 존재한다.
public class Test{
int a; // 멤버 변수
String b;// 멤버 변수
void method1(){};
char method2(){};
char c;// 멤버 변수
}
👉 라이프 타임 : 메서드 수행이 끝나고 나면 스택에서 제거된다.
public class Test{
int a;
String b;
void method1(){int x = 0;};
char mwthod2(){int y = 1;};
// x,y는 지역 변수 이다.
{}안에서 선언된 변수는 {}안에서만 사용할 수 있다.
👉 라이프 타임 : {}이 끝나면 사라진다.
변수 선언 시 루프 밖의 변수와 루프 안의 변수의 이름이 달라야 한다.
👉 라이프 타임 : 루프가 끝나면 사라진다.
class Test
{
public static void main(String args[])
{
{
int x = 5; // 블럭 밖에서 선언 후
{
int x = 10; // 같은 이름으로 다시 선언 할 수없다.
System.out.println(x);
}
}
}
}
public static void main(String args[])
{
int a = 5;
for (int a = 0; a < 5; a++) // 오류가 남.
{
System.out.println(a);
}
}
class Test {
public static void main(String args[])
{
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
int i = 20; // 루프가 끝났기 때문에 같은 변수 이름을 사용가능함.
System.out.println(i);
}
}
Reference