[Java] Compile vs Rumtime Error
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 컴파일 타임과 런타임 왜 구분해야 할까?
컴파일 타임 에러는 코드가 ‘실행되기 전’에 발견된다
- 개발자가 코드를 작성하는 시점에서 문제를 미리 알 수 있다
- 실행 불가능한 코드를 방지할 수 있다
런타임 에러는 ‘실행 도중’ 발생한다
- 모든 가능성을 컴파일러가 검사할 수 없음
- 실제 데이터, 환경에 따라 문제가 생김
- 사용자 경험을 해치지 않도록 적절한 예외 처리 필요
- 컴파일 에러는 try-catch 못 쓰지면 런타임은 가능
출처 : chatGPT