예외(exception)
오류 : 하드웨어의 오동작 또는 고장으로 인해 응용프로그램 실행 오류가 발생하는것
예외 : 에러 이외에 프로그램 자체서 발생하는 오류
예외와 예외 클래스
일반 예외(checked exception): 컴파일러가 예외 처리를 강제하는 예외입니다.
예를 들어 파일 입출력과 같은 작업에서 발생할 수 있는 IOException, ClassNotFoundException 등이 일반 예외에 해당됩니다.
일반 예외는 try-catch문으로 예외를 처리하거나 throws 키워드를 이용하여 예외를 상위 메소드로 던지도록 처리해야 합니다.
실행 예외(unchecked exception): 컴파일러가 예외 처리를 강제하지 않는 예외입니다.
NullPointerException, ArrayIndexOutOfBoundsException, ClassCastException 등이 실행 예외에 해당됩니다.
실행 예외는 try-catch문으로 처리하지 않아도 되며, throws 키워드를 이용하여 예외를 던지는 것도 선택적입니다.
실행 예외는 프로그래머의 실수나 논리적 오류 등으로 인해 발생하는 예외이므로, 이러한 예외가 발생할 가능성이 있는 코드에서는 예외 처리를 직접 해주는 것이 좋습니다.
두 예외 모두 예외 처리를 통해 프로그램의 안정성을 높이는 것이 좋습니다.
일반 예외는 강제적으로 예외 처리를 해주어야 하기 때문에 예외 처리 코드가 반드시 필요합니다.
실행 예외는 강제적으로 예외 처리를 하지 않아도 되지만, 프로그램의 안정성을 높이기 위해 예외 처리 코드를 추가하는 것이 좋습니다.
Class not found
"Class not found"는 자바 프로그램에서 발생할 수 있는 예외 중 하나입니다. 이 예외는 클래스를 찾을 수 없는 경우 발생하며, 보통 다음과 같은 경우에 발생합니다.
클래스가 존재하지 않는 경우: 클래스 이름을 잘못 입력하거나, 클래스 파일을 삭제한 경우 등이 있습니다.
클래스 로딩에 실패한 경우: 클래스 파일이 존재하지만, 해당 클래스의 의존성이나 클래스 로딩 순서 등의 이유로 클래스 로딩에 실패한 경우입니다.
클래스 패스 설정이 잘못된 경우: 클래스 파일이 존재하는 위치를 찾을 수 없는 경우입니다. 보통 클래스 패스 설정이 잘못된 경우 발생합니다.
Class not found 예외는 보통 ClassNotFoundException 예외 클래스를 통해 처리됩니다. 예외 처리 방법으로는 try-catch 블록을 이용하여 예외를 처리하거나,
throws 키워드를 이용하여 상위 메소드로 예외를 던지도록 처리할 수 있습니다.
예외를 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있으므로, 반드시 예외 처리 코드를 추가하는 것이 좋습니다.
Null Pointer Exception
"Null Pointer Exception"은 자바 프로그램에서 발생할 수 있는 예외 중 하나입니다.
이 예외는 null 값을 가지고 있는 객체를 참조할 때 발생합니다.
예를 들어, null 값을 가진 객체의 메소드를 호출하거나, null 값을 가진 객체의 필드를 참조하면 Null Pointer Exception이 발생합니다.
Null Pointer Exception은 프로그래머의 실수로 인해 발생할 수 있으며, 디버깅하기 어려운 예외 중 하나입니다.
이 예외는 보통 NullPointerException 예외 클래스를 통해 처리됩니다.
예외 처리 방법으로는 try-catch 블록을 이용하여 예외를 처리하거나,
throws 키워드를 이용하여 상위 메소드로 예외를 던지도록 처리할 수 있습니다.
Null Pointer Exception을 방지하기 위해서는, 객체를 참조하기 전에 항상 null 체크를 해주어야 합니다.
또한, 객체를 생성할 때 null 값을 가진 객체를 생성하지 않도록 주의해야 합니다.
Null Pointer Exception은 자바 프로그래밍에서 자주 발생하는 예외 중 하나이므로, 반드시 예외 처리 코드를 추가하는 것이 좋습니다.
ArrayIndexOutOfBoundsException
"ArrayIndexOutOfBoundsException"은 자바 프로그램에서 발생할 수 있는 예외 중 하나입니다. 이 예외는 배열 인덱스 범위를 벗어난 경우 발생합니다. 예를 들어, 배열의 길이가 5인데 인덱스 5를 참조하면 ArrayIndexOutOfBoundsException이 발생합니다.
ArrayIndexOutOfBoundsException은 보통 배열의 길이나 인덱스를 잘못 지정한 경우에 발생합니다. 이 예외는 ArrayIndexOutOfBoundsException 예외 클래스를 통해 처리됩니다. 예외 처리 방법으로는 try-catch 블록을 이용하여 예외를 처리하거나, throws 키워드를 이용하여 상위 메소드로 예외를 던지도록 처리할 수 있습니다.
ArrayIndexOutOfBoundsException을 방지하기 위해서는, 배열의 길이를 항상 체크하고, 유효한 인덱스 범위 내에서만 배열 요소에 접근해야 합니다. 또한, for-each 문을 사용할 때는 배열의 길이보다 작은 범위에서만 반복문을 실행해야 합니다. ArrayIndexOutOfBoundsException은 자바 프로그래밍에서 자주 발생하는 예외 중 하나이므로, 반드시 예외 처리 코드를 추가하는 것이 좋습니다.
예제 테스트를 위해 값을 다음과 같이 주었습니다.
값이 2개가 아니라 아래의 출력이 나타남
NumberFormatException
"NumberFormatException"은 자바 프로그램에서 발생할 수 있는 예외 중 하나입니다. 이 예외는 문자열을 숫자로 변환하는 과정에서 발생합니다. 예를 들어, "123a"와 같은 문자열을 숫자로 변환하면 NumberFormatException이 발생합니다.
NumberFormatException은 보통 문자열을 숫자로 변환하는 과정에서 잘못된 형식의 문자열이 사용된 경우에 발생합니다. 이 예외는 NumberFormatException 예외 클래스를 통해 처리됩니다. 예외 처리 방법으로는 try-catch 블록을 이용하여 예외를 처리하거나, throws 키워드를 이용하여 상위 메소드로 예외를 던지도록 처리할 수 있습니다.
NumberFormatException을 방지하기 위해서는, 문자열을 숫자로 변환하기 전에 항상 문자열의 형식을 체크하고, 유효한 형식의 문자열만을 숫자로 변환해야 합니다. 또한, 숫자로 변환한 결과가 예상한 범위를 벗어나지 않도록 주의해야 합니다. NumberFormatException은 자바 프로그래밍에서 자주 발생하는 예외 중 하나이므로, 반드시 예외 처리 코드를 추가하는 것이 좋습니다.
예제
문자열 "100"은 숫자로 변환이 가능하기 때문에 8라인이 정상적으로 실행되지만, data2 변수의 "a100" 문자열은 숫자로 변환할 수 없기 때문에 9라인에서 다음과 같이 NumberFormat Exception이 발생합니다.
ClassCastException
"ClassCastException"은 자바 프로그램에서 발생할 수 있는 예외 중 하나입니다. 이 예외는 형변환을 할 수 없는 경우에 발생합니다. 예를 들어, 부모 클래스 타입의 객체를 자식 클래스 타입으로 형변환하려고 할 때, 해당 부모 클래스 객체가 실제로 자식 클래스의 인스턴스가 아닌 경우 ClassCastException이 발생합니다.
ClassCastException은 보통 형변환을 잘못 사용하는 경우에 발생합니다. 이 예외는 ClassCastException 예외 클래스를 통해 처리됩니다. 예외 처리 방법으로는 try-catch 블록을 이용하여 예외를 처리하거나, throws 키워드를 이용하여 상위 메소드로 예외를 던지도록 처리할 수 있습니다.
ClassCastException을 방지하기 위해서는, 형변환을 사용할 때 항상 타입을 체크하고, 형변환이 가능한 경우에만 형변환을 수행해야 합니다. 또한, 객체의 타입 정보를 이용하여 형변환을 수행할 수 있는지 여부를 항상 체크해야 합니다. ClassCastException은 자바 프로그래밍에서 자주 발생하는 예외 중 하나이므로, 반드시 예외 처리 코드를 추가하는 것이 좋습니다.
예제를 실행하면 14라인에서 ClassCastException이 발생한다.
그 이유는 9라인에서 Cat 객체를 매개값으로 주어서 Dog 타입으로 변환할 수 없기 때문입니다.
13, 15 라인에 주석을 풀어서 타입 체크를 하는것이 좋다.
끝.
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java 예외 처리 #2 (0) | 2023.02.23 |
---|---|
Java 중첩 클래스와 중첩 인터페이스 #1 (0) | 2023.02.22 |
Java 인터페이스 #2 (0) | 2023.02.22 |
Java 인터페이스 #2 (0) | 2023.02.20 |
Java 인터페이스 #1 (0) | 2023.02.20 |