Skip to main content

[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 컴파일 타임과 런타임 왜 구분해야 할까?

컴파일 타임 에러는 코드가 ‘실행되기 전’에 발견된다
  • 개발자가 코드를 작성하는 시점에서 문제를 미리 알 수 있다
  • 실행 불가능한 코드를 방지할 수 있다
런타임 에러는 ‘실행 도중’ 발생한다
  • 모든 가능성을 컴파일러가 검사할 수 없음
  • 실제 데이터, 환경에 따라 문제가 생김
  • 사용자 경험을 해치지 않도록 적절한 예외 처리 필요

2. Exception vs Error

2.1 Checked Exception (확인된 예외)

  • 컴파일 타임 반드시 처리해야 하예외
  • try-catch 또는 throws쓰지면 예외 처리를 강제함
  • 주로 외부 자원과 관련된 작업에서 발생 (파일, 네트워크 등)

대표적인 예

예외 클래스

설명

IOException

파일, 네트워크 입출력 문제

SQLException

DB 관련 예외

ClassNotFoundException

클래스를 찾을 수 없음

InterruptedException

스레드가 인터럽트 되었을 때


2.2 Unchecked Exception (확인되지 않은 예외)

  • 런타임 중에 발생하는 예외
  • 컴파일러 예외 처리를 강제하지 않음
  • 프로그래머 실수나 논리 오류로 인해 발생

대표적인 예

예외 클래스

설명

NullPointerException

null 객체 접근

ArrayIndexOutOfBoundsException

배열 범위 초과 접근

ArithmeticException

0으로 나누기

ClassCastException

잘못된 형변환

NumberFormatException

문자열 → 숫자 변환 실패


2.3 에러 (Error)

  • 예외(Exception)와는 다르게 애플리케이션에서 복구할 수 없는 심각한 문제
  • 주로 JVM 자체의 문제나 리소스 부족

대표적인 에러

에러 클래스

설명

OutOfMemoryError

힙 메모리 부족

StackOverflowError

재귀 호출 무한 반복

NoClassDefFoundError

클래스 로딩 실패

→ 이런 건 예외 처리보다 프로그램 구조 개선이 우선이다.


2.4 정리

분류

처리 강제

발생 시점

주 사용 영역

Checked Exception

컴파일 타임

외부 자원 문제

Unchecked Exception

아니오

런타임

코드 오류, 로직 문제

Error

복구 불가

런타임

시스템 레벨 문제



출처 : chatGPT