RuntimeException과 CompileException은 둘 다 예외(Exception) 클래스들이지만, 각각 다른 상황에서 발생하는 예외를 나타냅니다.
오늘의 포스팅은 RuntimeException, CompileException 에 대한 설명과 예제에 대해 설명하겠습니다.
1. RuntimeException, CompileException 란?
(1) RuntimeException
RuntimeException은 런타임 시에 발생하는 예외를 나타냅니다. 즉, 코드가 실행되는 동안에 발생하는 예외를 가리킵니다.
이 예외는 명시적으로 예외를 처리할 필요가 없습니다. 따라서 컴파일러가 체크를 하지 않기 때문에 "unchecked exception"이라고도 합니다.
예를 들어, 배열 범위를 벗어난 접근, NullPointerException, 형 변환 오류 등이 RuntimeException의 예시입니다.
(2) CompileException
CompileException은 컴파일 시에 발생하는 예외를 나타냅니다. 즉, 코드를 컴파일하는 동안에 발생하는 문제를 가리킵니다.
컴파일러가 코드를 분석하고 변환하는 과정에서 발생하는 오류로, 코드 작성자가 수정해야 합니다.
예를 들어, 올바르지 않은 문법, 타입 일치 오류 등이 CompileException을 유발할 수 있습니다.
2. RuntimeException 예제
- NullPointerException
str이 null이므로 length() 메서드를 호출하면 NullPointerException이 발생합니다.
String str = null;
System.out.println(str.length()); // NullPointerException
- ArrayIndexOutOfBoundsException
배열의 길이는 3이지만, 인덱스 5에 접근하여 요소를 참조하면 범위를 벗어난 예외가 발생합니다.
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // ArrayIndexOutOfBoundsException
- ArithmeticException
0으로 나누기는 정의되어 있지 않으므로, 0으로 나누려고 하면 ArithmeticException이 발생합니다.
int result = 10 / 0; // ArithmeticException
- ClassCastException
Object를 Integer로 캐스팅하려고 하는데, 실제 객체가 Integer가 아니므로 ClassCastException이 발생합니다.
Object obj = "Hello";
Integer num = (Integer) obj; // ClassCastException
- NumberFormatException
문자열 "abc"를 정수로 변환하려고 하면 NumberFormatException이 발생합니다.
String strNumber = "abc";
int number = Integer.parseInt(strNumber); // NumberFormatException
- IllegalArgumentException
매개변수로 전달된 값이 유효하지 않을 때 IllegalArgumentException을 발생시킵니다.
int age = -5;
if (age < 0) {
throw new IllegalArgumentException("Age must be non-negative");
}
- ConcurrentModificationException
컬렉션을 반복하는 도중에 컬렉션의 구조가 변경되면 발생합니다.
List<String> myList = new ArrayList<>();
for (String item : myList) {
myList.add("New Item"); // ConcurrentModificationException
}
- StackOverflowError
메소드가 자기 자신을 계속 호출하여 스택이 넘치면 StackOverflowError가 발생합니다.
public class RecursiveMethodExample {
public static void infiniteRecursion() {
infiniteRecursion();
}
public static void main(String[] args) {
infiniteRecursion(); // StackOverflowError
}
}
3. CompileException 예제
- SyntaxError
문법 오류로 인해 컴파일이 실패합니다.
System.out.println("Hello, World"; // Syntax error: Missing closing parenthesis
- TypeError
데이터 타입이 일치하지 않아 발생하는 오류입니다.
int number = 10;
String text = "Hello";
int result = number + text; // Type mismatch: cannot convert from String to int
- MissingMethodException
찾을 수 없는 메서드를 호출하려고 할 때 발생합니다.
public class MissingMethodExample {
public static void main(String[] args) {
nonExistentMethod(); // Cannot find symbol: method nonExistentMethod()
}
}
- UndefinedVariableException
정의되지 않은 변수를 참조하려고 할 때 발생합니다.
System.out.println(nonExistentVariable); // Cannot find symbol: variable nonExistentVariable
- DuplicateClassException
중복된 클래스 선언이 발생할 때 컴파일 오류가 발생합니다.
public class DuplicateClassExample {}
public class DuplicateClassExample {} // Duplicate class: DuplicateClassExample
'#IT 업무노트' 카테고리의 다른 글
사번 체계 변경시 고려해야 하는 사항 (2) | 2024.02.08 |
---|---|
EDI (Electronic Data Interchange) EAI 차이 (1) | 2024.02.06 |
Request for Information (RFI - 정보 요청), Request for Proposal (RFP - 제안서 요청) (0) | 2024.01.27 |
시스템 인수인계 절차와 체크리스트 (0) | 2024.01.26 |
JavaScript vs TypeScript (0) | 2024.01.15 |