Notice
Recent Posts
Recent Comments
Link
꾸준한 개발일기
컴파일 오류(Compile), 런타임(Runtime Error), 논리 오류(Logic Error)란? 본문
반응형
오류(에러)는 크게 컴파일 오류(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으로 나누기 |
논리 오류 | 실행 중 | 실행되지만 결과가 잘못됨 | 계산 실수, 잘못된 조건문 |
결론: 컴파일 오류 → 실행 전에 수정 가능 / 런타임 오류 & 논리 오류 → 실행 후에만 발견 가능
반응형
'Programing > 스프링' 카테고리의 다른 글
Lombok과 @RequiredArgsConstructor란? (0) | 2025.03.25 |
---|---|
스프링 의존관계 자동 주입 4가지 방법은? (0) | 2025.03.23 |
@Service 안 "비즈니스 로직"이란? (0) | 2025.03.22 |
스프링(Spring)과 스프링 부트(Spring Boot)의 차이 (0) | 2025.03.22 |
@Configuration이란? (0) | 2025.03.21 |
Comments