Skip to main content

[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