꾸준한 개발일기

컴파일 오류(Compile), 런타임(Runtime Error), 논리 오류(Logic Error)란? 본문

Programing/스프링

컴파일 오류(Compile), 런타임(Runtime Error), 논리 오류(Logic Error)란?

꾸개일 2025. 3. 24. 07:32
반응형

 

오류(에러)는 크게 컴파일 오류(Compile Error), 런타임 오류(Runtime Error), 논리 오류(Logic Error) 세 가지로 나뉨.


1️⃣ 컴파일 오류(Compile Error)

  • 코드 작성 후 컴파일 과정에서 발생하는 오류
  • 문법(Syntax) 오류, 타입(Type) 오류, 클래스/변수 미존재 오류 등이 있음
  • 실행 자체가 불가능함
  • 예제
int number = "Hello";  // 타입 불일치 오류 (컴파일 오류)
error: incompatible types: String cannot be converted to int

2️⃣ 런타임 오류(Runtime Error)

  • 프로그램 실행 중에 발생하는 오류
  • 컴파일은 성공하지만 실행 도중 문제가 발생하여 비정상 종료됨
  • 대표적인 예로 NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException 등이 있음

📌 (1) NullPointerException (널 참조 오류)

  • null 값을 가진 객체를 사용하려고 할 때 발생
public class Main {
    public static void main(String[] args) {
        String text = null;
        System.out.println(text.length());  // NullPointerException 발생
    }
}
Exception in thread "main" java.lang.NullPointerException

📌 (2) ArrayIndexOutOfBoundsException (배열 인덱스 초과)

  • 배열 범위를 초과하여 접근할 때 발생
public class Main {
    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        System.out.println(numbers[3]);  // 배열 인덱스 초과 오류 발생
    }
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

📌 (3) ArithmeticException (산술 오류)

  • 숫자 연산 중 문제가 발생할 때 (ex: 0으로 나누기)
public class Main {
    public static void main(String[] args) {
        int result = 10 / 0;  // 0으로 나누기 → ArithmeticException 발생
        System.out.println(result);
    }
}
Exception in thread "main" java.lang.ArithmeticException: / by zero

3️⃣ 논리 오류(Logic Error)

  • 코드 실행은 되지만 원하는 결과가 나오지 않는 오류
  • 컴파일도 되고, 런타임 오류도 발생하지 않지만 잘못된 로직으로 인해 결과가 틀림
  • 예제: 평균을 구할 때 나누는 값을 잘못 설정함
public class Main {
    public static void main(String[] args) {
        int total = 90;
        int count = 0; // 잘못된 값
        int average = total / count;  // 0으로 나누기 → 오류 발생
        System.out.println("평균: " + average);
    }
}
Exception in thread "main" java.lang.ArithmeticException: / by zero

 

수정 후 올바른 코드

int count = 3;  // 올바른 값 설정

 


4️⃣ 예외(Exception)와 오류(Error)의 차이

  • Exception: 프로그램이 회복할 수 있는 오류 (ex: 파일 없음, 네트워크 오류)
  • Error: 회복할 수 없는 심각한 오류 (ex: 메모리 부족, JVM 충돌)

💡 Exception은 try-catch로 처리 가능하지만, Error는 시스템 레벨의 문제라 해결 어려움
예제:

try {
    int result = 10 / 0;
} catch (ArithmeticException e) {
    System.out.println("0으로 나눌 수 없음");
}

📌 정리

오류 종류 발생 시점  특징 예제
컴파일 오류 컴파일 단계 실행 불가능 문법 오류, 타입 오류
런타임 오류 실행 중 프로그램 비정상 종료 NullPointerException, 0으로 나누기
논리 오류 실행 중 실행되지만 결과가 잘못됨 계산 실수, 잘못된 조건문

결론: 컴파일 오류 → 실행 전에 수정 가능 / 런타임 오류 & 논리 오류 → 실행 후에만 발견 가능

 

반응형
Comments