안녕하세요 오늘은 예외처리에 대해서 공부를 해보려고 합니다. 항상 코드를 짜다보면 오류가 발생해도 실행이 되는 경우가 종종있는데 막상 실행해보면 결과는 이상하게 나오고..! 그런경우가 종종발생하는데  오늘은 그 문제를 한번 해결해보도록 합시다..!

 

우오오오오오오!!

(항상 시작은 힘차게!!)
 

 

 

✅ 00. 예외처리(Exception)
 예외처리란?
자바에서는 에러 이외에 예외라고 부르는 오류가 있다. 예외란 잘못된 사용 또는 코딩으로 인한 오류를 말하는데, 예외가 발생되면 프로그램은 곧바로 종료된다는 점에서는 에러와 동일하지만, 예외 처리를 통해 계속 실행 상태를 유지할 수 있습니다.  예외에는 다음 두 가지가 존재합니다.
 
· 일반 예외(Exception) : 컴파일러가 예외 처리 코드 여부를 검사하는 예외를 말합니다.
· 실행 예외(Runtime Exception) : 컴파일러가 예외 처리 코드 여부를 검사하지 않는 예외를 말합니다.  
 

출처 - https://devprofessional.hashnode.dev/7jii7jm4ioyymoumrcgr7yq4656c7j6t7iwykq

 
 
 
 
✅ 01. 예외처리코드
 try-catch-finally란?
예외가 발생했을 대 프로그램의 갑자스러운 종료를 막고 정상 실행을 유지할 수 있도록 처리하는 코드를 예외 처리 코드라고 합니다. 예외 처리 코드는 try-catch-finally 블록으로 구성됩니다. try-catch-finally 블록은 생성자 내부와 메소드 내부에서 작성됩니다.

출처 - https://kimmy100b.github.io/java/2020/05/11/java-exceptionhandling/

 
try 블록에서 작성한 코드가 예외 없이 정상 실행되면 catch 블록은 실행되지 않고 finally 블록이 실행됩니다. 그러나 try 블록에서 예외가 발생하면 catch 블록이 실행되고 연이어 finally 블록이 실행됩니다. (예외 발생 여부와 상관없이 finally 블록은 항상 실행된다.)
 
 

아하 구조가 이렇게 되는거였구나..!

 
 

✅ 02. 예외 종류에 따른 처리
 다중 catch를 사용하면?
try 블록에는 다양한 종류의 예외가 발생할 수 있는데, 아 경우에는 다중 catch를 사용하면 발생하는 예외에 따라 예외 처리 코드를 다르게 작성할 수 있습니다.

 

다음 예제를 보면 배열의 인덱스가 초과되었을 경우 발생하는 ArrayIndexOutOfBoundsException 과 숫자타입이 아닐때 발생하는 NumverFormatException을 각각 다르게 예외 처리하는 코드입니다.
 
※ 처리해야할 예외 클래스들이 상속 관계에 있을 때는 하위 클래스 catch 블록을 먼저 작성하고 상위 클래스 catch 블록을 나중에 작성해야 합니다. 예외가 발생하면 catch 블록은 위에서부터 차례대로 검사를 합니다.
 
 

✅ 03. 예외 넘기기
throws란?
매소드 내부에서 예외가 발생할 때 try-catch 블록으로 예외를 처리하는 것이 기본이지만, 메소드를 호출한 곳으로 예외를 넘길 수도 있습니다. 이때 사용하는 키워드가 throws인데, throws는 메소드 선언부 끝에 적상하는데, 넘길 예외 클래스를 쉼표로 구분해서 나열해 주면 됩니다.

리턴타입 메소드명 throws 예외클래스1, 예외클래스2, ...{}

 

다음예제를 보면 나열해야 할 예외 클래스가 많을 경우에는 throws Exception 또는 throws Throwable 만으로 모든 예외를 간단히 넘길수 있습니다. main() 메소드에서도 throws 키워드를 사용해서 예외를 떠넘길 수 있는데, 결국 JVM이 최종적으로 예외 처리를 하게 됩니다.
 
 


✅ 04. 사용자 정의예외(정의예외/예외 발생 시키기)
사용자 정의예외란?
사용자 정의 예외는 컴파일러가 체크하는 일반 예외로 선언할 수도 있고, 컴파일러가 체크하지 않는 실행 예외로 선언할 수도 있습니다. 

// 일반 예외 시 Exception, 실행 예외 시 RuntimeException
public class XXXException extends [ Exception | RuntimeException ] {
	public XXXException() {	// 매개변수 없는 기본 생성자
    }
	public XXXException(String message) { super(message); } // 예외 발생원인 전달용 생성자
}

 
 
예외 발생 시키기란?
자바에서 제공하는 표준 예외뿐만 아니라 사용자 정의 예외를 직접 코드에서 발생시키려면 throw 키워드와 함계 예외 객체를 제공하면 됩니다. 

 
다음 예제는 Accunt 클래스의 withdraw 메소드에서 balance 필드와 츨금액을 비교해 잔고가 부족하면 insufficientException을 발생시키고 throws하게 했습니다.
 

AccountExample은 withdraw() 메소드를 호출할 떄 예외 처리를 하게 만들어서 예금액은 10000원인데 출금액은 30000원이라서 예외가 발생하게 되었습니다,
 
 

이상 예외처리는 간단하게 끝!

 
다음부터는 제네릭인데요…점점어려워지네요 더 열심히공부해볼게요...!

'Java' 카테고리의 다른 글

13. Java - ★스레드(1)★_(이론편)  (0) 2024.07.04
12. Java - 제네릭(Generic)  (0) 2024.07.02
10. Java - 상속  (0) 2024.05.12
09. Java - 클래스(3)_인스턴스/정적멤버  (1) 2024.05.10
08. Java - 클래스(2)_실습편  (0) 2024.05.10
2024. 6. 25. 22:31