Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java) '기호를 찾을 수 없음(cannot find symbol)' 오류의 원인과 해결 방법

자바 프로그램에서 외부 클래스나 인터페이스(직접 작성한 클래스 또는 JDK에 내장된 클래스)를 사용하려면 import 키워드를 통해 해당 클래스를 현재 프로그램으로 가져와야 합니다.

'기호를 찾을 수 없음' 오류가 발생하는 원인

클래스를 가져올(import) 때 아래와 같은 문제가 있으면 컴파일러는 "cannot find symbol"(기호를 찾을 수 없음) 오류를 발생시킵니다.

  • 가져오려는 클래스/인터페이스의 경로가 JVM에서 인식되지 않는 경우
  • import 문에 명시한 클래스 이름이 정확하지 않은 경우 (패키지명과 클래스명 전체 포함)
  • 코드에서 사용한 클래스나 인터페이스를 아예 가져오지 않은 경우

그 밖에도 변수나 메서드를 선언하지 않고 사용했거나, 대소문자를 잘못 입력한 경우에도 동일한 오류가 발생할 수 있습니다.

오류 발생 예제

다음 예제는 키보드(System.in)로부터 사용자 이름을 문자열로 입력받는 코드입니다. 입력 처리를 위해 java.util 패키지의 Scanner 클래스를 사용합니다.

public class ReadingData {
    public static void main(String args[]) {
        System.out.println("Enter your name: ");
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        System.out.println("Hello " + name);
    }
}

컴파일 타임 오류

위 코드는 Scanner 클래스를 사용하면서도 이를 import하지 않았습니다. 따라서 컴파일 시 다음과 같은 오류가 발생합니다.

ReadingData.java:4: error: cannot find symbol
        Scanner sc = new Scanner(System.in);
        ^
    symbol:   class Scanner
    location: class ReadingData
ReadingData.java:5: error: cannot find symbol
        String name = sc.next();
                      ^
    symbol:   variable sc
    location: class ReadingData
2 errors

해결 방법

  • 필요한 클래스가 포함된 JAR 파일의 클래스패스(classpath)를 올바르게 설정합니다.
  • import 키워드를 사용해 해당 패키지에서 필요한 클래스를 가져옵니다. 이때 패키지와 하위 패키지를 모두 포함하는 전체 경로(정규화된 클래스명)를 정확하게 지정해야 합니다.

수정된 예제

import java.util.Scanner;

public class ReadingData {
    public static void main(String args[]) {
        System.out.println("Enter your name: ");
        Scanner sc = new Scanner(System.in);
        String name = sc.next();
        System.out.println("Hello " + name);
    }
}

실행 결과

Enter your name:
krishna
Hello krishna

이처럼 'cannot find symbol' 오류는 대부분 클래스 선언부 누락, import 문 누락 또는 오타에서 비롯됩니다. 오류 메시지에 표시된 심볼(symbol)과 위치(location)를 먼저 확인하면 원인을 빠르게 파악할 수 있습니다.