자바(Java)를 배우기 시작하면 누구나 한 번쯤은 에러 메시지 폭탄을 맞습니다.
특히 NullPointerException이나 ClassNotFoundException 같은 익숙한 문구는
초보 개발자들의 첫 시련이죠.
이 글에서는 자바 입문자가 가장 많이 겪는 대표적인 에러 10가지를
예시와 함께 살펴보고,
IDE(이클립스, IntelliJ)에서 손쉽게 디버깅하는 방법까지
정리해드릴게요.

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%는 해결됩니다.
다음 세 가지를 기억하세요:
- 에러 메시지의 첫 줄이 ‘문제의 핵심’ (Exception in thread ...)
- 가장 마지막 줄(Stack trace의 마지막)이 실제 에러 위치
- IDE의 브레이크포인트를 이용하면 변수 상태를 즉시 확인 가능
💡 팁:
Eclipse에서는 Ctrl + Shift + B로 중단점을 걸고,F8로 단계별 실행을 할 수 있습니다.
<!-- 이미지 ③ : 결론
'개발자 기초 & 실무' 카테고리의 다른 글
| 예외처리(try-catch-finally) 제대로 이해하기 — 실전 에러 대응법 (1) | 2025.11.11 |
|---|---|
| Git 시작하기 — Push, Pull, Merge 충돌 해결까지 초보자를 위한 3단계 (0) | 2025.11.09 |
| JSP 코드 자동 정렬 단축키와 포맷 설정으로 가독성 높이기 (0) | 2025.11.06 |
| Java 초보 개발자를 위한 코드 줄맞춤과 주석 정리의 모든 것 (0) | 2025.11.05 |
| 감사 로깅/Audit: 로그인 실패·권한거부 탐지 규격 (0) | 2025.10.15 |