관계, Networking 그리고 Programming

case expressions must be constant expressions 에러

androbook 본캐 2013. 6. 5. 18:44

코딩을 진행하던 중 멀쩡한 switch-case 문에서 에러가 발생했다.


코드 : 

switch(requestCode){

    case NEW_ACT:

    break;

    case LAST_ACT:

    default:

    break;

     }


에러 : case expressions must be constant expressions


수정을 하려 검색을 해 보니, switch-case 문을 if-else 문으로 변경하여 수정했다는 글들이 보인다. 엥? if-else 문보다 switch-case 문을 쓰고 싶어서 사용한 것인데, 이걸 꼭 수정해야 해? 따라서 다른 방법을 찾아보기로 한다. 에러 문장을 다시 들여다 보자. 해석하자면, case 조건(expression)은 반드시(must) 상수(constant) 여야 한단다. 오, 다시 한 번 보니 case 문의 조건 정의에 final 이 없다. final을 붙여보니 문제가 수정된다.


수정전 :

private int NEW_ACT = 1;

private int LAST_ACT = NEW_ACT + 1;

수정후 :

private final int NEW_ACT = 1;

private final int LAST_ACT = NEW_ACT + 1;


아는 바와 같이, final은 해당 변수를 상수처럼 사용할 수 있도록 돕는다. 즉, 초기화 한 값으로 해당 변수를 유지 시켜준다는 뜻이다. 따라서 define 값들은 항상 final을 붙여주는 습관을 붙여야겠다.


그런데, 그럼 변수를 사용하는 조건으로는 switch 문을 사용할 수 없다는 거네? 아니 왜? 물론 대신 if-else 문을 사용해도 상관은 없지만, 굳이 이런 까탈스러움이 왜 필요한 건지? 라는 의문은 나중에 해결하자. 지금은 일단 너무 깊이 파지 말고 후딱후딱 코딩이나 하란 말이다!! 라는 결론.