[Java] static 변수 사용시 주의사항

2024. 2. 1. 11:02Java

static 변수를 만들고 메서드에서 같은 이름의 지역 변수를 만들고 초기화하면 static 변수는 여전히 초기화되지 않는다. 

예를 들어, 아래와 같이 설정을 해놓았다.

public class SubSet {
	
	static int N, target;
	static int[] subSet;
	static int[] set;
	static boolean isSelected[];
	
	public static void main(String[] args) {
		
		set = new int[] {1, 2, 3};
		
		int N = set.length;
		
		subSet = new int[N];
		isSelected = new boolean[N];
		generateSubSet(0);
	}

그리고 아래의 함수를 사용하면 원하는 결과가 나오지 않는다. 왜냐하면 N은 static 변수인데 지역 변수를 초기화한 것이고 이 N은 초기화되지 않았기 때문이다. 

private static void generateSubSet(int cnt) {
		if (cnt == N) {
			for (int i = 0; i < N; i++) {
				System.out.print((isSelected[i]?set[i]:"X") + "\t");
			}
			System.out.println();
			return;
		}
		
		isSelected[cnt] = true;
		generateSubSet(cnt+1);
		isSelected[cnt] = false;
		generateSubSet(cnt+1);
	}