[Java] Compile vs Rumtime Error / Error vs Exception
1. 컴파일 에러 VS 런타임 에러
- 컴파일 에러 → 문법 틀렸을 때 (IDE가 바로 알려줌)
- 런타임 에러 → 실행 도중에 생기는 문제 (예외 처리 필요)
- 논리적 오류 → 실행도 되고 에러도 안 나지만 결과가 틀림 (개발자가 디버깅해야 함)
1.1 컴파일 타임 에러 (Compile-time Errors)
1) Syntax Error (문법 오류)
- 예: 세미콜론 누락, 괄호 불일치, 잘못된 키워드 사용
int x = ; // 세미콜론 뒤에 값 없음 → 컴파일 실패
2) Cannot find symbol
- 예: 선언되지 않은 변수, 메서드 호출
System.out.println(myVar); // myVar 선언 안 됨
3) Type mismatch (타입 불일치)
- 예: 다른 타입 변수에 값 할당
int num = "123"; // String을 int에 대입 불가
4) Variable might not have been initialized
- 예: 초기화 안 된 지역변수 사용
int a;
System.out.println(a); // 초기화 필요
5) Duplicate method or variable
- 예: 같은 이름의 변수 또는 메서드 중복 선언
1.2 런타임 에러 (Runtime Errors)
1) NullPointerException (NPE)
- 설명: null인 객체에 접근 시 발생
String s = null;
s.length(); // NPE 발생
2) ArrayIndexOutOfBoundsException
- 설명: 배열 범위 벗어난 인덱스 접근
int[] arr = new int[3];
arr[5] = 10; // 오류 발생
3) NumberFormatException
- 설명: 숫자가 아닌 문자열을 숫자로 변환 시도
Integer.parseInt("abc"); // 오류 발생
4) ClassCastException
- 설명: 잘못된 타입 캐스팅 시도
Object obj = "string";
Integer num = (Integer) obj; // 오류 발생
5) ArithmeticException
- 설명: 산술 오류, 예를 들면 0으로 나누기
int x = 10 / 0; // 오류 발생
1.3 컴파일 타임과 런타임 왜 구분해야 할까?
컴파일 타임 에러는 코드가 ‘실행되기 전’에 발견된다
- 개발자가 코드를 작성하는 시점에서 문제를 미리 알 수 있다
- 실행 불가능한 코드를 방지할 수 있다
런타임 에러는 ‘실행 도중’ 발생한다
- 모든 가능성을 컴파일러가 검사할 수 없음
- 실제 데이터, 환경에 따라 문제가 생김
- 사용자 경험을 해치지 않도록 적절한 예외 처리 필요
2. Exception vs Error
2.1 Checked Exception (확인된 예외)
- 컴파일 타임에 반드시 처리해야 하는 예외
try-catch
또는throws
로 예외 처리를 강제함- 주로 외부 자원과 관련된 작업에서 발생 (파일, 네트워크 등)
대표적인 예
예외 클래스 | 설명 |
---|---|
| 파일, 네트워크 입출력 문제 |
| DB 관련 예외 |
| 클래스를 찾을 수 없음 |
| 스레드가 인터럽트 되었을 때 |
2.2 Unchecked Exception (확인되지 않은 예외)
- 런타임 중에 발생하는 예외
- 컴파일러가 예외 처리를 강제하지 않음
- 프로그래머 실수나 논리 오류로 인해 발생
대표적인 예
예외 클래스 | 설명 |
---|---|
| null 객체 접근 |
| 배열 범위 초과 접근 |
| 0으로 나누기 |
| 잘못된 형변환 |
| 문자열 → 숫자 변환 실패 |
2.3 에러 (Error)
- 예외(Exception)와는 다르게 애플리케이션에서 복구할 수 없는 심각한 문제
- 주로 JVM 자체의 문제나 리소스 부족
대표적인 에러
에러 클래스 | 설명 |
---|---|
| 힙 메모리 부족 |
| 재귀 호출 무한 반복 |
| 클래스 로딩 실패 |
→ 이런 건 예외 처리보다 프로그램 구조 개선이 우선이다.
2.4 정리
분류 | 처리 강제 | 발생 시점 | 주 사용 영역 |
---|---|---|---|
Checked Exception | 예 | 컴파일 타임 | 외부 자원 문제 |
Unchecked Exception | 아니오 | 런타임 | 코드 오류, 로직 문제 |
Error | 복구 불가 | 런타임 | 시스템 레벨 문제 |