[Java] 컴파일 에러 VS 런타임 에러
- 컴파일 에러 → 문법 틀렸을 때 (IDE가 바로 알려줌)
- 런타임 에러 → 실행 도중에 생기는 문제 (예외 처리 필요)
- 논리적 오류 → 실행도 되고 에러도 안 나지만 결과가 틀림 (개발자가 디버깅해야 함)
1 컴파일 타임 에러 (Compile-time Errors)
1.1 Syntax Error (문법 오류)
- 예: 세미콜론 누락, 괄호 불일치, 잘못된 키워드 사용
int x = ; // 세미콜론 뒤에 값 없음 → 컴파일 실패
1.2 Cannot find symbol
- 예: 선언되지 않은 변수, 메서드 호출
System.out.println(myVar); // myVar 선언 안 됨
1.3 Type mismatch (타입 불일치)
- 예: 다른 타입 변수에 값 할당
int num = "123"; // String을 int에 대입 불가
1.4 Variable might not have been initialized
- 예: 초기화 안 된 지역변수 사용
int a;
System.out.println(a); // 초기화 필요
1.5 Duplicate method or variable
- 예: 같은 이름의 변수 또는 메서드 중복 선언
2 런타임 에러 (Runtime Errors)
2.1 NullPointerException (NPE)
- 설명: null인 객체에 접근 시 발생
String s = null;
s.length(); // NPE 발생
2.2 ArrayIndexOutOfBoundsException
- 설명: 배열 범위 벗어난 인덱스 접근
int[] arr = new int[3];
arr[5] = 10; // 오류 발생
2.3 NumberFormatException
- 설명: 숫자가 아닌 문자열을 숫자로 변환 시도
Integer.parseInt("abc"); // 오류 발생
2.4 ClassCastException
- 설명: 잘못된 타입 캐스팅 시도
Object obj = "string";
Integer num = (Integer) obj; // 오류 발생
2.5 ArithmeticException
- 설명: 산술 오류, 예를 들면 0으로 나누기
int x = 10 / 0; // 오류 발생
3. 결론
컴파일 타임 에러는 코드가 ‘실행되기 전’에 발견된다
개발자가 코드를 작성하는 시점에서 문제를 미리 알 수 있다.
실행 불가능한 코드를 방지할 수 있다.
런타임 에러는 ‘실행 도중’ 발생한다
모든 가능성을 컴파일러가 검사할 수 없음
실제 데이터, 환경에 따라 문제가 생김
사용자 경험을 해치지 않도록 적절한 예외 처리 필요
컴파일 에러는 try-catch 못 쓰지면 런타임은 가능
출처 : chatGPT