지역변수는 메소드 내부에서 선언되어 사용되는 변수를 말한다, 메소드 내부에서 선언된 변수는 메소드 내부에서만 사용이 가능하다. 해당 메소드를 벗어나거나 메소드 실행이 끝나면 메모리에서 사라진다.
지역변수는 초기화하지 않으면 자동으로 해당타입의 기본값으로 초기화된다.
public static void main(String[] args) {
String name = "김사과";
int age= 20;
Stirng address; // null로 초기화된다.
}
main메소드안에 변수 name과 phone, address을 선언했으므로 지역변수이다.
클래스 영역에서 선언된 변수를 멤버변수라고 한다. 이때 static이 붙으면 클래스멤버, static이 붙지 않으면 인스턴스 멤버이다. 멤버변수는 클래스멤버와 인스턴스멤버를 통칭하는 말이다.
멤버변수를 필드, 소속변수, 클래스변수, 속성변수라고도 부른다.
멤버변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버변수 중에서 static이 붙으면 클래스변수, static이 붙지 않으면 인스턴스 변수로 나뉜다.
class A {
// 클래스 영역
String name; // 멤버변수, 인스턴스멤버
static int age; // 멤버변수, 정적멤버
void method1(){
// 메소드 영역
String address = "서울특별시"; // 지역변수
}
}
멤버변수에서 static이 붙지 않는 변수를 인스턴스 멤버라고 한다. 외부에서 사용할 때 반드시 new연산자로 객체를 생성해야 접근이 가능하다. 외부에서 객체를 생성하여 인스턴스멤버를 사용하는 것을 인스턴스화, 객체화라고 한다. 객체를 생성한 후에는 객체 참조 연산자(.)를 사용해 “인스턴스명.인스턴스변수명”으로 변수를 사용할 수 있다.
예제를 통해 인스턴스멤버를 선언하고 변수를 어떻게 사용하는지 살펴보자.
class A {
String name; // 멤버변수, 인스턴스멤버
}
A a1 = new A();
a1.name = "김사과";
멤버변수에서 static이 붙은 변수를 정적멤버 혹은 클래스멤버라고 부른다. 객체를 생성해야 접근이 가능한 인스턴스 멤버와는 다르게 정적멤버는 인스턴스를 생성하지 않아도 접근이 가능하다.
접근하는 방법은 “클래스명.클래스변수명’”으로 객체 참조 연산자(.)를 사용한다. static메소드는 정적멤버만 접근이 가능하지만 non-static메소드는 인스턴스멤버와 정적멤버 모두 접근이 가능하다.
예제를 통해 정적멤버를 선언하고 변수를 어떻게 사용하는지 살펴보자.
class B {
static int age; // 멤버변수, 정적멤버
}
A.age = 20;
신용권, 『혼자공부하는 자』, 한빛미디어(2023)