로컬 변수는 초기화를 꼭 해야한다. 초기화 하지 않고 사용을 하면 Variable '변수명' might not have been initialized라는 에러가 발생한다. 함수가 호출되면 생성되고 함수가 끝날 때 소멸된다.
private void foo() {
int a = 10;
System.out.println("name = " + a);
}
선언 위치 : 함수 내부
저장 위치 : 스택 메모리
인스턴스 변수는 로컬 변수와 다르게 초기화를 하지 않아도 된다. 자동으로 기본값으로 초기화 되기 때문이다. 다음 코드에서 name은 null, age는 0을 기본값으로 가진다. 객체가 생성될 때 함께 생성된다. 소멸은 생성된 객체(instance)를 더 이상 참조하는 참조 변수가 없을 때 GC(Garbage Collector)에 의해서 제거된다.
public class Developer {
private String name;
private int age;
}
선언 위치 : 함수 외부
저장 위치 : 힙 메모리
인스턴스 변수처럼 함수 외부에 선언을 하며 초기화를 하지 않아도 기본값으로 설정된다. 차이가 있다면 static 키워드를 꼭 사용해야 한다. static 변수는 프로그램 실행 시 생성되고 종료될 때 소멸된다. 따라서 프로그램이 실행되는 동안에는 값이 유지되어야 하는 경우에 사용된다.
public class Developer {
private static String name;
private static int age;
}
선언 위치 : 함수 외부
저장 위치 : 함수 영역 (Method Area)