[ 목차 ]
- 프로그래밍 오류의 종류
1. 컴파일 오류 (Compile-time error)
- 컴파일 오류는 코드를 컴파일하는 과정에서 발생하는 오류이다. 컴파일러가 코드를 분석하면서 잘못된 구문을 발견하면 컴파일 오류가 발생하며, 컴파일 오류를 해결하지 않으면 프로그램이 실행되지 않는다.
2. 런타임 오류 (Runtime error)
- 런타임 오류는 프로그램이 실행되는 동안 발생하는 오류로, 컴파일 과정에서는 발견되지 않다가 실행 중에 발생한다. 런타임 오류는 프로그램의 비정상적인 종료를 초래할 수 있으므로 적절한 예외처리가 필요하다.
- 자바에서의 오류(Error)와 예외(Exception)
자바에서는 프로그램 중단을 초래할 수 있는 문제 상황을 Throwable 클래스를 통해 관리하며, 이 클래스는 두 가지 하위 클래스로 나뉜다.
1. 오류 (Error)
Error는 시스템 레벨에서 발생하는 심각한 문제를 나타내며, 개발자가 처리할 수 없는 치명적인 오류이다. Error는 주로 JVM 관련 문제로 인해 발생하며, 복구가 불가능해 프로그램을 종료하는 것이 일반적이다. 따라서 Error는 예외 처리로 다루지 않는 것이 일반적이다.
주요 예시:
- OutOfMemoryError: 메모리가 부족할 때 발생
- StackOverflowError: 재귀 호출이 너무 깊어져서 스택 메모리가 초과될 때 발생
- VirtualMachineError: 가상 머신이 손상되었거나 문제가 발생했을 때
2. 예외 (Exception)
Exception은 프로그램 코드에서 발생할 수 있는 문제 상황을 나타내며, 개발자가 예외 처리를 통해 문제를 해결할 수 있는 오류이다. Exception은 일반적으로 예외 처리 구문인 try-catch를 사용해 포착하고 복구한다.
주요 예시:
- IOException: 파일을 읽거나 쓸 때 오류가 발생하는 경우
- IndexOutOfBoundsException : index 값이 범위를 넘어갈 경우
- SQLException: 데이터베이스 관련 작업 중 오류가 발생하는 경우
- NullPointerException: 참조 변수에 null 값이 할당된 상태에서 접근하려는 경우
- IllegalStateException : 객체의 상태가 메소드 호출에는 부적합할 경우
- ArithmeticException: 산술 연산 중 오류가 발생하는 경우 (예: 0으로 나누기)
- EmptyStackException : 스택이 비어있는데 요소를 제거하려고 할 경우
- 자바에서의 Checked Exception과 Unchecked Exception
자바의 예외는 Checked Exception과 Unchecked Exception으로 구분된다.
1. Checked Exception (확인된 예외)
Checked Exception은 컴파일 타임에 확인되는 예외로, 예외 처리 코드가 반드시 필요하다. 이러한 예외는 메서드에서 발생할 가능성이 있을 때 try-catch 구문으로 처리하거나, 메서드 선언부에 throws 키워드를 사용해 명시해야 한다. Checked Exception을 적절히 처리하지 않으면 컴파일 에러가 발생한다.
주요 예시:
- IOException: 입출력 작업 중 발생할 수 있는 예외
- SQLException: 데이터베이스 작업 중 발생할 수 있는 예외
- ClassNotFoundException: 특정 클래스를 로드할 수 없는 경우 발생
2. Unchecked Exception (확인되지 않은 예외)
Unchecked Exception은 컴파일 타임에 확인되지 않고, 런타임 시에 발생하는 예외다. 예외 처리가 필수는 아니며, RuntimeException 클래스를 상속하는 예외가 여기에 포함된다. 예외가 발생하면 프로그램이 비정상 종료될 수 있으므로 적절히 예외를 처리하는 것이 좋지만, 컴파일러가 강제하지는 않는다.
주요 예시:
- NullPointerException: 참조 변수가 null인 상태에서 접근하려고 할 때
- ArrayIndexOutOfBoundsException: 배열의 인덱스 범위를 벗어났을 때
- ArithmeticException: 산술 연산 중 잘못된 연산이 있을 때 (예: 0으로 나누기)
- 예외처리 방식
자바에서는 Checked와 Unchecked Exception을 처리하는 기본적인 방식은 동일하다.
그러나, Checked Exception의 경우 컴파일러가 예외 처리를 강제하기 때문에 컴파일 타임에 예외 처리 코드가 필요하다. Unchecked Exception은 주로 발생 가능성이 적은 곳에서 발생하므로, 필요에 따라 예외 처리를 추가한다.
Checked Exception 예외 처리 방식
- try-catch 구문을 사용하여 예외 처리
- throws 키워드를 사용하여 예외를 호출한 메서드로 전파
Unchecked Exception 예외 처리 방식
- 주로 런타임 중 발생할 가능성이 높으므로, 필요할 때 try-catch로 처리
- 컴파일러가 강제하지 않기 때문에 상황에 맞게 처리
Checked Exception | Unchecked Exception | |
발생 시점 | 컴파일 단계 | 런타임 단계 |
처리 여부 | 반드시 예외를 처리해야 함 | 명시적인 처리를 안해도 됨 |
상속관계 | Exception 하위 클래스 | RuntimeException 하위 클래스 |
- 자바에서 프로그램의 안정성을 높이고 오류를 사전에 방지하기 위해 다양한 예외처리 방법을 제공하고 있다.
우아한 프리코스를 진행하면 많은 예외처리를 해야하는 상황이 있는데 열심히 공부해 프로그램의 신뢰성과 유지보수성을 향상시킬 수 있도록 노력하자!!!
출처
https://choiblack.tistory.com/39
[Java] Error와 Exception
컴파일 오류와 런타임 오류 프로그램을 실행하다가 보면 어떠한 원인때문에 비정상적인 동작을 일으시켜 프로그램이 종료되는 상황을 자주 볼 수 있다. 이를 우리는 프로그램에 오류가 발생했
choiblack.tistory.com
☕ 자바 에러(Error) 와 예외 클래스(Exception) 💯 이해하기
프로그래밍의 오류 종류 프로그램에서 오류가 발생하면 시스템 레벨에서 프로그램에 문제를 야기하여 원치 않는 버그를 일으키거나, 심각하면 실행 중인 프로그램을 강제로 종료시키도 한다.
inpa.tistory.com
'JAVA' 카테고리의 다른 글
자바 컬렉션 프레임워크 (0) | 2024.12.10 |
---|---|
Enum이란? (1) | 2024.11.01 |
오버로딩 vs 오버라이딩 (7) | 2024.10.23 |
JDK/JRE/JVM 개념 (0) | 2024.10.14 |
추상 클래스 vs 인터페이스 (0) | 2024.10.14 |