새발블로그
변수 유효범위 본문
변수의 유효 범위 (Variable Scope)
Java에서 변수는 선언된 위치에 따라 유효 범위(Scope)가 달라진다.
변수의 범위는 크게 지역 변수(Local Variable), 전역 변수(Global Variable)로 나눌 수 있습니다.
1. 지역 변수 (Local Variable)
- 메서드 내부에서 선언된 변수
- 메서드가 실행될 때 생성되고, 종료되면 사라짐
- 해당 메서드 내에서만 사용할 수 있음
public void greet() {
String name = "홍길동"; // 지역 변수
System.out.println(name);
}
2. 전역 변수 (Global Variable)
- 전역 변수는 클래스 전체에서 사용할 수 있는 변수
- Java에서는 전역 변수를 인스턴스 변수와 클래스 변수(static)로 구분
2-1. 인스턴스 변수
- 클래스 내부에서 선언되며, 객체가 생성될 때 초기화됨
- 객체마다 다른 값을 가짐
public class Person {
private String name = "홍길동"; // 인스턴스 변수
public void printName() {
System.out.println(name);
}
}
2-2. 클래스 변수 (Static 변수)
- static 키워드를 사용해 선언
- 클래스 전체에서 공유, 모든 객체가 동일한 값을 가짐
- 프로그램 실행 시 메모리에 올라가며, 종료 시까지 유지됨
public class AppInfo {
private static String version = "1.0.0"; // 클래스 변수
public static void printVersion() {
System.out.println(version);
}
}
3. 변수 전달 방식
- Java에서 변수는 값에 의한 전달 (Call by Value) 방식으로 전달된다.
- 하지만 객체 타입을 전달할 경우에는 참조값이 복사되기 때문에, 그 참조값을 이용해 원본 데이터를 수정할 수 있다.
예: 기본 자료형
public class Example {
public static void main(String[] args) {
String visited = "True";
func(visited);
System.out.println(visited); // 여전히 "True"
}
public static void func(String visited) {
visited = "False"; // 지역에서만 변경됨
}
}
예: 참조형 자료 (List)
public class Example {
public static void main(String[] args) {
List<String> visited = new ArrayList<>(List.of("True", "True"));
func(visited);
System.out.println(visited); // [False, False]
}
public static void func(List<String> visited) {
visited.set(0, "False");
visited.set(1, "False");
}
}
리스트 같은 객체는 참조값이 전달되므로, 내부 요소 변경은 호출한 쪽에도 반영된다.
단, visited = new ArrayList<>() 처럼 새로운 객체를 할당하면 원본에는 영향을 주지 않는다.
4. 전역 변수 vs 매개변수 전달
방법 1. 전역 변수 사용
public class ScopeExample {
static String visited = "True"; // 클래스 변수
public static void func1() {
System.out.println(visited);
func2();
}
public static void func2() {
System.out.println(visited); // 접근 가능
}
}
방법 2. 매개변수로 전달
public class ScopeExample {
public static void func1() {
String visited = "True";
func2(visited);
}
public static void func2(String visited) {
System.out.println(visited); // 매개변수로 전달받음
}
}
'Problem Solving > 개념' 카테고리의 다른 글
| 재귀 (0) | 2025.07.04 |
|---|---|
| 레퍼런스 타입 매개변수 (0) | 2025.07.04 |
| HashSet (0) | 2025.07.04 |
| 해시테이블 (0) | 2025.07.04 |
| 스택 (0) | 2025.07.04 |