Scope는 변수나 메서드가 유효한 범위, 즉 어느 부분에서 접근하고 사용할 수 있는지를 정의한다. Scope를 이해하는 것은 변수의 생명주기를 관리하고, 코드의 안정성과 가독성을 높이는 데 중요하다.
클래스 필드는 static
키워드를 사용하여 정의되며, 클래스가 메모리에 로드될 때 한 번만 생성된다. 모든 인스턴스가 동일한 값을 공유하며, 클래스 이름으로 직접 접근이 가능하다.
클래스명.변수명
으로 접근 가능하다.class Variable {
static String classVariable = "클래스 필드";
}
public class Main {
public static void main(String[] args) {
System.out.println(Variable.classVariable); // "클래스 필드" 출력
}
}
인스턴스 필드는 각 객체(인스턴스)가 독립적으로 가지는 변수이다. 객체가 생성될 때 메모리에 할당되며, 해당 객체의 수명 동안 유지된다. 각 인스턴스마다 독립적인 값을 가진다.
인스턴스명.변수명
).class Variable {
String instanceVariable = "인스턴스 필드";
}
public class Main {
public static void main(String[] args) {
Variable v1 = new Variable();
Variable v2 = new Variable();
v1.instanceVariable = "v1 필드 값";
v2.instanceVariable = "v2 필드 값";
System.out.println(v1.instanceVariable); // "v1 필드 값" 출력
System.out.println(v2.instanceVariable); // "v2 필드 값" 출력
}
}
지역 변수는 메서드나 블록 내에서 선언된 변수로, 해당 블록 내에서만 사용 가능하다. 블록을 벗어나면 더 이상 접근할 수 없으며, 메모리에서 사라진다.
class Variable {
void doFunc() {
String localVariable = "지역 변수";
System.out.println(localVariable); // "지역 변수" 출력
}
}
public class Main {
public static void main(String[] args) {
Variable v = new Variable();
v.doFunc();
// v.localVariable 접근 불가능 (지역 변수는 메서드 내에서만 유효)
}
}
지역 변수는 메서드뿐만 아니라 제어문(if, for, while 등) 안에서도 사용할 수 있다. 이런 경우, 블록({}
) 내부에서 선언된 변수는 그 블록을 벗어나면 사용할 수 없다.
public class Main {
public static void main(String[] args) {
int num1 = 10; // 메서드의 지역 변수
{
// 블록 내부에서 새로운 지역 변수 선언
int num2 = 20;
System.out.println("num1 = " + num1); // 10 출력
System.out.println("num2 = " + num2); // 20 출력
}
// System.out.println(num2); // 오류 발생: num2는 블록 바깥에서 접근 불가능
}
}
변수는 선언된 위치에 따라 다른 생명주기를 갖는다. 각 변수는 특정 시점에 생성되고, 그 시점이 지나면 메모리에서 사라진다.
public class Example {
static int number = 5; // 클래스 변수
void method() {
int number = 10; // 지역 변수
System.out.println(number); // 출력: 10 (지역 변수 우선)
}
void anotherMethod() {
System.out.println(number); // 출력: 5 (클래스 변수에 접근)
}
public static void main(String[] args) {
Example example = new Example();
example.method();
example.anotherMethod();
}
}
Scope를 올바르게 이해하고 사용하는 것은 코드의 안정성과 가독성을 크게 향상시킨다. 변수와 메서드를 적절한 범위에 선언하여, 오류 가능성을 줄이고 코드 유지 보수성을 높일 수 있다.