본문 바로가기
개발자 기초 & 실무

가장 흔한 자바 에러 10가지, 초보자도 쉽게 해결하는 디버깅 가이드

by yamoojin83 2025. 11. 8.

 

자바(Java)를 배우기 시작하면 누구나 한 번쯤은 에러 메시지 폭탄을 맞습니다.

특히 NullPointerException이나 ClassNotFoundException 같은 익숙한 문구는

초보 개발자들의 첫 시련이죠.

이 글에서는 자바 입문자가 가장 많이 겪는 대표적인 에러 10가지를

예시와 함께 살펴보고,
IDE(이클립스, IntelliJ)에서 손쉽게 디버깅하는 방법까지

정리해드릴게요.

 

java 에러 디버깅 가이드

 

 

1. NullPointerException — 널 참조 에러

자바에서 가장 흔한 오류입니다.
객체가 아직 생성되지 않았는데 그 안의 메서드나 필드를

호출할 때 발생합니다.


String name = null;
System.out.println(name.length()); // NullPointerException 발생

 

해결법:
객체를 사용하기 전에 반드시 null 여부를 확인하세요.


if (name != null) {
    System.out.println(name.length());
}

2. ArrayIndexOutOfBoundsException — 배열 인덱스 범위 초과

배열의 크기를 넘어서는 인덱스에 접근하면 생깁니다.

이런 오류는 반복문 조건을 잘못 지정했을 때 자주 발생합니다.


int[] scores = new int[3];
System.out.println(scores[3]); // 인덱스는 0~2까지만 존재

 

해결법:
for문에서 항상 i < 배열.length 조건을 사용하세요.

 

3. ClassNotFoundException — 클래스 파일 누락

클래스 경로(Classpath)에 .class 파일이 없을 때 발생합니다.

주로 외부 라이브러리를 추가하지 않았을 때 나타납니다.

 

해결법:
Build Path → Add External JARs로 라이브러리를 등록하거나,
Maven/Gradle 환경이라면 dependency 설정을 다시 확인하세요.

 

4. NoSuchMethodError — 메서드 정의 불일치

컴파일할 때는 있었지만 실행 중에 사라진 메서드를 호출할 때 발생합니다.
보통 라이브러리 버전 충돌로 인해 생깁니다.

 

해결법:
jar 파일 버전을 통일하거나,
빌드 캐시를 삭제 후 재빌드(clean & build)하세요.

5. ArithmeticException — 0으로 나누기

수학적으로 불가능한 연산을 수행할 때 발생합니다.


int result = 10 / 0; // ArithmeticException

해결법:
나누기 전에 0 체크를 수행하세요.

6. NumberFormatException — 문자열 → 숫자 변환 실패

문자열을 정수로 바꿀 때 숫자가 아닌 값이 들어가면 발생합니다.


String age = "ten";
int a = Integer.parseInt(age); // NumberFormatException

해결법:
변환 전 정규식을 활용해 숫자만 있는지 검사합니다.

7. IllegalArgumentException — 잘못된 인자 전달

메서드에 유효하지 않은 인자를 전달할 때 발생합니다.

특히 Thread.sleep(-1)처럼 음수를 넘기면 바로 예외가 발생합니다.

해결법:
인자의 범위나 null 여부를 검증하는 방어 코드를 작성하세요.

8. StackOverflowError — 무한 재귀 호출

자기 자신을 계속 호출하는 재귀 함수가 종료 조건 없이 실행될 때 생깁니다.


public void callMe() {
    callMe(); // 종료 조건 없음 → StackOverflowError
}

해결법:
종료 조건을 명시하거나 반복문으로 구조를 바꾸세요.

9. OutOfMemoryError — 메모리 부족

대용량 데이터나 무한 루프가 메모리를 과도하게 점유하면 발생합니다.

특히 List.add()를 무한히 수행하는 경우 자주 생깁니다.

해결법: 데이터 처리를 스트림(Stream)이나 batch 단위로 나누어 수행하세요.

 

 

10. FileNotFoundException — 파일 경로 오류

지정한 경로에 파일이 존재하지 않을 때 발생합니다.

경로 오타나 파일 위치 변경으로 인해 자주 생깁니다.


File file = new File("C:/data/test.txt");
Scanner sc = new Scanner(file); // FileNotFoundException

해결법:
경로 앞뒤 공백을 제거하고,
절대경로인지 상대경로인지 명확히 구분하세요.

11. (보너스) IOException — 입출력 전반의 에러

파일 읽기/쓰기, 네트워크 통신 중 발생할 수 있는 모든 입출력 예외입니다.

항상 try-catch로 감싸서 예외를 처리하세요.

초보자를 위한 디버깅 기본기

에러 메시지를 읽는 능력만으로도 디버깅의 70%는 해결됩니다.

다음 세 가지를 기억하세요:

  1. 에러 메시지의 첫 줄이 ‘문제의 핵심’ (Exception in thread ...)
  2. 가장 마지막 줄(Stack trace의 마지막)이 실제 에러 위치
  3. IDE의 브레이크포인트를 이용하면 변수 상태를 즉시 확인 가능

💡 팁:
Eclipse에서는 Ctrl + Shift + B로 중단점을 걸고,
F8로 단계별 실행을 할 수 있습니다.

<!-- 이미지 ③ : 결론