Java 컴파일 과정에서 자주 마주치는 "cannot find symbol"(기호를 찾을 수 없음) 오류는 주로 컴파일 중인 프로그램에 선언되지 않은 변수를 참조하려고 할 때 발생합니다. 쉽게 말해, 컴파일러가 개발자가 가리키는 변수나 식별자가 무엇인지 인식하지 못한다는 의미입니다.
"Cannot find symbol" 오류의 주요 원인
- 선언되지 않은 변수 사용 — 코드 어디에도 선언되지 않았거나 현재 유효 범위(scope)를 벗어난 변수를 참조하는 경우
- 대소문자 및 철자 오류 — Java는 대소문자를 엄격하게 구분하므로 "tutorials"와 "Tutorials"는 완전히 다른 식별자입니다. 오타 역시 동일한 오류를 유발합니다.
- import 선언 누락 — 다른 패키지에 속한 클래스를 import 문으로 올바르게 가져오지 않은 경우
- 부적절한 식별자 사용 — 식별자는 문자, 숫자, 밑줄(_), 달러 기호($)로만 구성할 수 있습니다. 예를 들어 "hello-class"와 "helloclass"는 서로 다른 이름이며, 하이픈(-)이 포함된 이름은 컴파일 오류를 일으킵니다.
예제 코드
public class CannotFindSymbolTest {
public static void main(String[] args) {
int n1 = 10;
int n2 = 20;
sum = n1 + n2;
System.out.println(sum);
}
}실행 결과
CannotFindSymbolTest.java:5: error: cannot find symbol sum = n1 + n2; ^ symbol: variable sum location: class CannotFindSymbolTest CannotFindSymbolTest.java:7: error: cannot find symbol System.out.println(sum); ^ symbol: variable sum location: class CannotFindSymbolTest
오류 분석 및 해결 방법
위 프로그램에서 오류가 발생하는 이유는 sum 변수가 선언되지 않은 상태로 사용되었기 때문입니다. 컴파일러는 5번째 줄에서 "sum이라는 변수를 찾을 수 없다"며 오류를 보고하고, 7번째 줄에서 println() 메서드 내부에서 다시 한 번 동일한 오류를 출력합니다.
이 문제를 해결하려면 변수를 사용하기 전에 반드시 타입과 함께 선언해야 합니다. 아래와 같이 수정하면 됩니다.
int sum = n1 + n2;
오류 방지를 위한 팁
- 변수는 사용하기 전에 항상 타입을 명시하여 선언합니다.
- IDE의 자동 완성 기능을 활용하면 철자나 대소문자 실수를 줄일 수 있습니다.
- 외부 클래스를 사용할 때는 필요한 import 문이 빠져 있지 않은지 확인합니다.
- 변수 이름에는 하이픈(-) 같은 특수문자를 사용하지 않습니다.