JAVA/자바와 데이터 다루기
컴파일 오류 vs 런타임 오류
by DEVLIB
2025. 4. 13.
1. 컴파일 오류 (Compile-time Error)
코드를 컴파일할 때(= 실행 전) 발생하는 오류
문법적으로 잘못된 경우가 대부분입니다.
대표 예시
int x = "hello"; // 타입 오류
System.out.println(x // 괄호 닫지 않음
특징
항목 |
내용 |
발생 시점 |
코드 컴파일 중 |
주 원인 |
문법, 타입, 선언 오류 등 |
해결 방법 |
IDE(이클립스, IntelliJ)에서 빨간 밑줄로 즉시 확인 가능 |
2. 런타임 오류 (Runtime Error)
프로그램 실행 도중 발생하는 오류
컴파일은 통과했지만, 실행 중 예외 상황이 발생해요.
대표 예시
int[] arr = {1, 2, 3};
System.out.println(arr[5]); // 배열 인덱스 초과
String str = null;
System.out.println(str.length()); // NullPointerException
특징
항목 |
내용 |
발생 시점 |
프로그램 실행 중 |
주 원인 |
배열 범위 초과, 0으로 나누기, null 접근 등 |
해결 방법 |
try-catch 문, 디버깅으로 예외 추적 필요 |
두 오류 비교 정리
비교 항목 |
컴파일 오류 |
런타임 오류 |
시점 |
컴파일(작성) 중 |
실행 중 |
원인 |
문법/타입 오류 |
예외 상황, 논리 오류 |
발견 방법 |
컴파일러가 즉시 감지 |
실행해야 발견됨 |
예시 |
세미콜론 빠짐, 변수 미선언 |
배열 인덱스 오류, null 접근 |
해결 |
문법 수정 |
예외 처리 / 로직 수정 필요 |
실습 아이디어
- 컴파일 오류 intentionally 만들기 (int a = "문자열";)
- null, 0으로 나누기, 배열 범위 초과 실습 → try-catch로 예외 처리
- 사용자 입력 기반의 NumberFormatException 예외 확인
예외(Exception)과의 관계
- 대부분의 런타임 오류는 예외(Exception) 형태로 발생
- try-catch로 잡아서 처리할 수 있어요:
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다!");
}
마무리 요약
구분 |
컴파일 오류 |
런타임 오류 |
언제 발생? |
코드 작성/컴파일 시 |
실행 중 |
프로그램 실행 가능? |
실행 자체 안 됨 |
실행 도중 중단 |
예시 |
문법 오류, 타입 불일치 |
예외, 논리 오류 등 |
해결 방법 |
코드 문법 수정 |
예외 처리, 디버깅 등 |