-
[자바기초] 예외 처리(Exception) 정리노트º Language º/Java 2023. 4. 6. 22:39
* 예외 처리 ?
- 예외 : 프로그램 실행 중 사용자의 부주의 등으로 인해 발생하는 예기치 않는 오류 상황을 말합니다.
즉, 이것을 처리하는 것을 예외처리라고 합니다.
- 자바는 기본적으로 발생할만한 예외들에 대하여 클래스를 만들어 두었습니다.
그래서 그 상황이 되면 자동으로 예외 객체가 생성됩니다. 우리는 그 이외의 예외 객체를 잡아서 처리해주면 됩니다.
public void 메소드명(){ try{ 예외가 발생할만한 문장(들) }catch(예외 자료형 변수명){ 예외처리 시 노출시킬 문장(들) } }
> 기본적으로 try{ } catch( ){ }를 활용하여 예외 처리를 합니다.
* 예외 처리 방법 (2가지)
1. 메소드 안에서 직접 try{ } catch( ){ } 하여 직접 처리하는 방법
class DivTest { int a = 4; int b = 2; public static void div(int a, int b) { try{ //메소드 안에서 예외 처리. int r = a/b; System.out.println(r); }catch(Exception e){ System.out.println("예외 발생 : "+ e.getMessage()); } } public static void main(String[] args) { new DivTest(); } }
> try 안에 예외가 발생할만한 문장을 넣고, catch 에서 예외 처리 시 노출 시킬 문장들을 작성하여 메소드 안에서 예외를 바로 처리할 수 있습니다.
2. 메소드 선언문 (메소드 이름 뒤에) 써주며 예외처리를 메소드 호출쪽으로 throws하여 예외를 전파하는 방법
class DivTest { public static void div(int a, int b) throws ArithmeticException{ int r = a/b; System.out.println(r); } public static void main(String[] args) { int a = 4; int b = 2; try{ div(a,b); }catch(Exception e){ System.out.println("예외 발생 : "+ e.getMessage()); } } }
> 메소드 선언문에 보면 ArithmeticException 을 throws 하여 메인에 호출 되어 예외처리를 한 것을 확인할 수 있습니다.
> 아래의 .getMessage()는 자동으로 오류 메세지를 나타내주는 메서드입니다.
* 여러 예외 처리 시 처리순서
class DivTest { public static void div(int a, int b) { try{ int r = a/b; System.out.println(r); }catch(ArithmeticException e) { -> 작은 예외 먼저와야 기능을 함. System.out.println("예외 발생 : "+ e.getMessage()); }catch(Exception e){ -> exception이 높은 클래스 이므로 뒤에와야 함. System.out.println("예외 발생 : "+ e.getMessage()); } } public static void main(String[] args) { int a = 4; int b = 2; } }
> 하나의 try 안에 여러가지 catch 절이 올수도 있어요.
이때 범위가 작은 예외종류가 Exception과 같은 큰 예외종류보다 먼저 와야 합니다.
* RunTimeException
- RunTimeException의 후손들은 사용자가 따로 예외처리를 하지 않아도 자바가 알아서 예외처리를 해주기 때문에 컴파일이 됩니다. 그러나 RunTimeException의 후손이 아닌 예외들은 사용자가 반드시 꼭 예외처리를 해주어야 컴파일 됩니다.* 대부분 예외를 포함하고 있는 패키지
1. java.io -> 파일입출력
2. java.net -> 네트워크통신
3. java.sql -> 데이터베이스연결* finally
원래 기본적으로 예외가 발생되면 문제가 발생 된 것이기 때문에 해당 catch 절을 수행하고 해당 프로그램이 종료됩니다.
근데 예외가 발생을 하거나 발생하지 않거나 상관없이 모든 상황에서 반드시 동작시켜야 할 명령이 있다면 finally에 써줍니다.
try{ 예외가 발생할 만한 명령(들) }catch(예외클래스명1 변수명1){ }catch(예외클래스명2 변수명2){ }catch(예외클래스명3 변수명3){ }finally{ }
> finally 기본 코드입니다.
* 사용자 정의 예외
자바는 대부분의 예외에 대하여 이미 클래스가 만들어져 있어요.
그러나 만약 내가 지금 하고 있는 프로그램에서 특정한 상황을 예외로 만들고자 한다면,'사용자 정의 예외' 를 만들 수 있어요. 그 때 사용하는 키워드는 throw입니다.
class 예외클래스이름 extends Exception{ public 예외클래스이름(String msg){ super(msg); } } try{ if(예외의 상황인가?){ throw new 예외클래스명(msg); } }catch(예외클래스명 변수명){ }
> 사용자 정의 예외를 위한 기본 코드입니다.
1. 예외처리 클래스를 새로 만듭니다.
2. 클래스 이름을 예외 클래스 이름으로 지정한 후 extends Exception 하여 상속 받습니다.
3. 예외 처리를 위해 try catch 를 이용하고, try 안에 if( 사용자 조건) { throw new ~;}를 해주면 됩니다.
+ 차이점 짚고가기 !throws 는 예외처리를 메소드에서 메인 호출로 전파하는 것 < - > throw는 강제로 예외를 발생시키는 것
ex) 두 수를 입력받아 두 수의 조화평균을 구하는 프로그램을 만들고 싶어요.
조화 평균의 공식 : 2ab/a+b
만약 ab의 절댓값이 같고 부호만 다르다면 두 수의 조합 평균은 있을 수가 없잖아요?(3+-3=0이 되어어버리니까)그러나 이 상황은 자바가 알수 없어요. 그렇게 때문에 그 상황을 강제로 사용자 정의 예외 처리를 해야해요.
'º Language º > Java' 카테고리의 다른 글
[자바기초] GUI 네트워크 통신 (TCP방식, UDP방식) 정리노트 (0) 2023.04.13 [자바기초] 멀티쓰레드(MultiThread), 임계영역(Critical section) 정리노트 (0) 2023.04.10 [자바기초] 생성자를 만드는 이유 정리노트 (0) 2023.04.02 [자바기초] 날짜 클래스 GregorianCalender 정리노트 (0) 2023.04.01 [자바기초] 컬렉션 프레임워크의 종류 (3가지), 제네릭 정리노트 (0) 2023.03.29