[JAVA]예외(Exception)

army246·2022년 4월 14일
0

JAVA

목록 보기
6/10

📌 예외(exception)

잘못된 조작, 잘못된 코딩으로 인해서 발생하는 프로그램 오류를 예외라고 한다.
예외가 발생되면 그 순간 종료된다는 점에서 에러와 비슷하다.
예외는 예외처리(exception handling)를 통해서 프로그램을 종료하지 않고 정상 실행 상태가 유지되도록 할 수 있다.

자바는 예외가 발생할 가능성이 높은 코드를 컴파일할 때 예외 처리 유뮤를 확인한다.

📌 예외 종류와 구조

Exception : 모든 예외 최상위 class 이다.

예외상황
ClassNotFoundException존재하지 않는 클래스를 사용하려고 할 때 발생
IOException입/출력 작업과정에서 문제상황이 발생했을 때 발생
NumberFormatException숫자 형식이 아닌 데이터를 숫자로 변경할 때 발생
ClassCastException클래스에 대한 불가능한 타입 변환 시도를 할 때 발생
ArrayIndexOutBoundsException존재하지 않는 배열 공간(index)을 사용하려고 할 때 발생
NullPointerException객체 참조가 없는 상태, 주소가 할당되지 않은 참조 변수를 사용하려고 할 때 발생
ArithmeticException0으로 나누는 등 불가능한 산술 연산을 할 때 발생

📌 예외처리

자바 컴파일러는 소스 파일을 컴파일할 때 예외가 발생할 가능성이 있는 코드를 발견하면 컴파일 에러를 발생시켜 개발자가 강제적으로 예외처리 코드를 작성하도록 한다.

❗️ try ~ catch

try {
    // 예외 발생 가능 코드
} catch(예외클래스 e) {
	// 예외 처리
}

try 블록

  • 예외 발생할 가능성있는 코드가 위치한다.

catch 블록

  • 예외가 발생하면 실행하는 블록이다.
  • try 블록의 코드에서 예외가 발생하면 실행을 멈추고 catch 블록으로 이동해서 예외 처리 코드를 실행한다.
  • catch 블록에 아무런 내용을 작성해주지 않으면, 어디서 오류가 발생했는지 파악하기가 어렵기 때문에 작성하는 것이 좋다.

❗️ 다중 catch문

try 블록 내부에서 다양한 예외가 발생하여 예외별로 예외 처리 코드를 작성할 때 사용하는 것이 다중 catch문이다.
try 블록에서 예외가 발생하면 그 예외 타입에 해당하는 catch 블록을 실행하도록 되어 있다.
try 블록에서 동시 다발적으로 예외가 발생하지 않고 하나의 예외가 발생하면 그 즉시 실행을 멈추고 해당 catch 블록으로 이동하기 때문에 catch 블록이 여러 개라 할지라도 하나의 catch 블록만 실행된다.
그렇기 때문에 catch 순서를 주의해야한다.
상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.
왜냐하면 하위 예외는 사위 예외를 상속했기 때문에 상위 예외 타입도 되기 때문이다.
그래서 모든 예외의 최상위 클래스인 Exception은 제일 마지막 위치해야 한다.

❗️ finally 블록

예외 발생 여부와 상관없이 실행된다. 항상 실행할 내용이 있을 경우에 finally 블록을 작성한다.
try, catch 블록에서 return 문을 사용해도 finally 블록은 항상 실행된다.

try { 
	// 예외 발생 가능 코드
} catch(예외클래스 e) {
	// 예외 처리
} finally {
	// 항상 실행;
}

❗️ 예외 떠넘기기 (throws)

throws 는 메소드에서 처리하지 않은 예외를 메소드를 호출한 곳으로 떠넘기는 역할을 하며, 메소드 선언부 끝에 작성된다.

리턴타입 메소드이름(매개변수, ...) throws 예외클래스1, 예외클래스2,... {

}

발생할 수 있는 예외의 종류별로 throws 뒤에 나열한다. 아니면 Exception 만으로 모든 예외를 간단하게 떠넘길 수도 있다.

리턴타입 메소드이름(매개변수, ...) throws Exception {

}

throws 키워드가 붙어 있는 메소드는 반드시 try 블록 내에서 호출되어야 하고, catch 블록에서 떠넘겨 받은 예외를 처리해야 한다.

❗️예외 발생(throw)

throw예외를 발생시키는 키워드이다.
예외 클래스 객체를 만들어주고 throw 로 예외를 강제적으로 발생시켜서 프로그램이 진행되지 않도록 할 수 있다.

참고

profile
천천히 꾸준히

0개의 댓글