java 예외처리

moonseungha·2023년 1월 2일
0

eclipse - java programming

목록 보기
11/11

📌프로그램 오류 (== 에러)

  • 프로그램 수행시 치명적 상황이 발생하여 비정상 종료상황이 발생한것

- 오류의 종류

  1. 컴파일 에러
    프로그램의 실행을 막는 소스 상의 문법 에러
    소스 구문을 수정하여 해결
  2. 런타임 에러 (예외)
    입력값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나, 계산식의 오류 등
    주로 if문 사용으로 에러 처리
  3. 시스템 에러 (예외)
    컴퓨터 오작동으로 인한 에러
    소스 구문으로 해결 불가
  4. 논리 에러 (예외)
    문법적으로 문제없고 실행했을때도 문제없지만 프로그램 의도에 맞지 않는 것

- 오류 해결 방법

  • 소스 수정으로 해결 가능한 에러를 예외(Exception)라고 하는데
    이러한 예외상황(예측 가능한 에러) 구문을 처리하는 방법인 예외처리를 통해 해결

📌예외 클래스 계층 구조

  • Exception과 Error 클래스 모두 Object 클래스의 자손이며 모든 예외의 최고 조상은 Exception 클래스
    반드시 예외처리 해야하는 Checked Exception과 해주지 않아도 되는 Unchecked Exception으로 나뉨

예외클래스예외발생시점예외처리
UnChecked ExceptionRuntimeException관련런타임에러
(프로그램실행시)
세모
(개발자가 원하는대로 처리 => 조건문/예외처리)
Checked ExceptionRuntimeException 외컴파일에러
(빨간줄)
필수
(조건문 기술 못함 => 예외처리로만 해결)

📌Unchecked Exception 예외처리

  • 예외처리구문이 필수는 아님

- RuntimeException 클래스

  • 예외 처리보다는 코드를 수정해야 하는 경우가 많음

- RuntimeException 후손 클래스

  • IndexOutOfBoundsException
    부적절한 인덱스 제시시 발생되는 예외
  • ArithmeticException
    0으로 나누는 경우 발생되는 예외
  • NullPointerException
    Null인 참조 변수로 객체 멤버 참조 시도 시 발생되는 예외
  • NegativeArraySizeException
    배열 크기를 음수로 지정한 경우 발생되는 예외
  • ArrayIndexOutOfBoundsException
    배열의 index범위를 넘어서 참조하는 경우 발생되는 예외
  • ClassCastException
    cast연산자 사용시 타입 오류가 발생되는 예외

- Exception 확인하기

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

📌Checked Exception 예외처리

  • 조건문 제시불가(예측 불가)하므로 예외처리구문 필수
  • 외부매개체와 입출력이 일어날 때 발생 (IOException)

📌예외처리 목적

  • 예외가 발생되어서 프로그램이 비정상적으로 종료되는것을 막기 위함

📌예외처리 방법

1. Exception 처리를 호출한 메소드에게 위임

  • 메소드 선언 시 throws ExceptionName문을 추가하여 호출한 상위 메소드에게 처리 위임
    계속 위임하면 main()메소드까지 위임하게 되고 거기서도 처리되지 않는 경우 비정상 종료

- throws로 예외 던지기

package 선언부
Class 작성부
	public void method throws IOException{
    
    }

2. Exception이 발생한 곳에서 직접 처리

  • try~catch문을 이용하여 예외처리
  • try
    exception 발생할 가능성이 있는 코드를 안에 기술
  • catch
    try 구문에서 exception 발생 시 해당하는 exceptio에 대한 처리 기술
    여러 개의 exception처리가 가능하나 exception간의 상속 관계 고려
  • finally
    exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술
    중간에 return문을 만나도 finally구문은 실행되지만
    System.exit();를 만나면 무조건 프로그램 종료
  • 주로 java.io나 java.sql 패키지의 메소드 처리 시 이용

- try~catch로 예외 잡기

  • 발생된예외클래스는 다형성 적용하여 RuntimeException으로 받을 수 있음
    단, 부모 예외 클래스보다 자식 예외 클래스를 먼저 기술해야함 (Unreachable catch block)
package 선언부
Class 작성부
	method 작성부
    	try {
			예외가 발생될 수 있는 구문;
		} catch(발생될예외클래스 매개변수) {
			해당 예외가 발생됐을경우 실행할 구문;
		}

- try~with~resource

자바7에서 추가된 기능으로 finally에서 작성했던 close 처리를 try문에서 자동 close 처리

📌printStackTrace() 메소드

  • catch구문의 매개변수.printStackTrace();
    발생된 예외의 이력을 보여주는 메소드

0개의 댓글