본문 바로가기
Programming/Java

[Java] Exception(예외처리)

by AI_Wooah 2022. 3. 7.

 

프로그램 에러의 종류

  • Compile-Time Error(컴파일 에러) : 소스 상의 문법 Error다.
  • Runtime Error(런타임 에러) : 입력 값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등으로 인해 발생한다.
  • Logical Error(논리 에러) : 문법상 문제가 없고, 런타임에도 발생하지 않지만, 개발자의 의도대로 작동하지 않는다.
  • System Error(시스템 에러) : 컴퓨터 오작동으로 인한 에러 → 소스 구문으로 해결이 불가능하다.

자바 오류 정의

Error(오류)

프로그램 수행 시 치명적 상황이 발생한 것으로 소스상 해결이 불가능한 것을 에러라고 한다. 프로그램이 비정상적으로 종료된다.

ex) OutOfMemoryError, StackOverflowError등.

Exception(예외)

프로그램 오류 중 적절한 코드에 의해서 수습될 수 있는 미약한 오류이다.

예외발생상황을 예측해서 미리 예외처리코드를 작성해둔다.

ex) NullPointerException, ArithmeticException, IOException 등.

예외처리(try~catch)의 목적

Why? 프로그램의 비정상적인 종료를 막고, 정상적인 실행상태를 유지하기 위함이다.

How! 예외상황이 발생된 경우에 처리 로직을 만든다.

예외 종류

Exception 클래스 상속도

  • Checked Exception : 소스코드 상에서 반드시 개발자가 예외 처리해야 하는 예외 → Exception → IOException → EOFException, FileNotFoundException
  • Unchecked Exception : 개발자가 소스코드 상에서 예외처리를 할 필요가 없는 예외 → RuntimeException → ArithmeticException, NullPointerException, IndexOutOfBoundsException

RuntimeException 클래스

Unchecked Exception이며, 주로 프로그래머의 부주의로 인한 bug인 경우가 많기 때문에 Exception 처리보다는 코드를 수정해야 하는 경우가 많다.

따라서 예외처리를 강제화 하지 않는다.

RuntimeException 후손클래스

  • ArithmeticException
  • 0으로 나누는 경우에 발생한다.
  • If문으로 먼저 나누는 수가 0인지를 검사해야 한다.
  • NullPointerException
  • Null인 ref.변수로 객체 멤버 참조를 시도할때 발생한다.
  • 객체를 사용하기 전에 ref.변수가 null인지 먼저 확인해야 한다.
  • NegativeArraySizeException
  • 배열 크기를 음수로 지정한 경우 발생한다.
  • 배열의 size를 0보다 크게 지정해야 한다.
  • ArrayIndexOutOfBoundsException
  • 배열의 index범위를 넘어서 참조하는 경우에 발생한다.
  • 배열이름.length를 써서 배열의 범위를 확인해야 한다.
  • ClassCastException
  • Cast연산자 사용시 타입 오류
  • Instanceof 연산자를 이용하여, 먼저 객체 타입을 확인한 후 Cast연산을 진행해야 한다.

Exception 확인하기

→ API Document에서 해당 클래스에 대한 생성자나 메소드를 검색하면, 그 메소드가 어떠한 Exception을 발생시킬 가능성이 있는지 확인할 수 있다. 해당 메소드를 사용하려면 반드시 뒤에 명시된 예외 클래스를 처리해야 한다.

Exception 처리 방법

  1. Exception 처리를 호출한 메소드에게 위임한다.
  • 메소드 선언시 throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리를 위임하여 try~catch를 통해 해결한다.
  • 계속적으로 위임하면 mail()까지 위임하게 되고, main()까지 가서도 예외처리가 되지 않는 경우 JVM이 비정상 종료된다.
  1. Exception을 발생한 곳에서 직접 처리한다.
  • try~catch문을 이용하여 예외를 처리한다.
  • try : exception 발생할
public static void sleep(int nanos, long millis)
		throws InterruptedException

public int

멀티 catch 표현식

finally에서는 반드시 닫아줘야 하는 것이나 반납해야 하는 것을 쓴다

스트림 생성

외부 파일에서 읽어들이다가 끝낼 때는 통로를 닫아줘야 한다. 이 때 finally 사용

상속을 받아 오버라이딩 할 때 후손 클래스에서 예외처리를 상위클래스와 같거나 더 구체적인 것로 바꿔줄 수 있다.

최상위 클래스 익셉션 상속받아 사용자 정의 예외 생성할 수 있다.

반응형

'Programming > Java' 카테고리의 다른 글

[Java] GUI(Graphic User Interface)  (0) 2022.03.07
[Java] IO(입출력)  (0) 2022.03.07
[Java] 기본 API  (0) 2022.03.07
[Java] 다형성  (0) 2022.03.07
[Java] 상속(Ingerit)  (0) 2022.03.07

댓글