예외처리 Exception

Robyn·2023년 5월 8일
0

Java

목록 보기
15/15

프로그램 오류

예외처리 Exception

  • 프로그램 오류
    프로그램 수행 시 치명적인(혹은 예기치 못한) 상황이 발생하여 비정상 종료 상황이 발생한 것,
    프로그램 에러라고도 함

  • 오류의 종류

  1. 컴파일 에러 : 프로그램의 실행을 막는 소스 상의 문법 에러(like 빨간 줄), 소스 구문을 수정하여 해결
  2. 런타임 에러 : 입력 값이 틀렸거나, 배열의 인덱스 범위를 벗어났거나(ArrayIndexOutOfBoundsException), 계산식의 오류 등 주로 조건문 등의 사용으로 에러 처리
  3. 시스템 에러 : 컴퓨터 오작동으로 인한 에러, 소스 구문으로 해결 불가
  • 오류 해결 방법
    소스 수정으로 해결 가능한 에러(컴파일 에러, 런타임 에러)를 예외(Exception)라고 하는데
    이러한 예외 상황(예측 가능한 에러) 구문을 처리하는 방법인 예외처리를 통해 해결
java.lang.Object
	java.lang.Throwable
		java.lang.Exception	// 여기까지는 공통으로 상속받는다.

예외 클래스 계층 구조


  • Cast연산자 사용 시 타입 오류
    instanceof연산자로 객체타입 확인 후 cast연산
    ex) String, Math같이 Object 아래의 형제일 뿐 부모자식 상속 관계가 아닌데 어느 하나를 형변환했을 때

예외 처리 방법

  1. Exception이 발생한 곳에서 직접 처리
    try~catch문을 이용하여 예외처리
  • try: exception 발생 가능성이 있는 코드를 안에 기술
    exception이 발생하지 않을 것 같은 코드를 넣어도 상관은 없지만 try문 안에 있는 모든 코드가 exception이 발생하지 않을 것 같은 코드라면 빨간 줄이 뜬다.

  • catch : try 구문에서 exception 발생 시 해당하는 exception에 대한 처리 기술
    catch문은 여러개 가능하나(여러 개의 exception 처리가 가능하나) 상속 관계를 고려하여 순서에 맞게 써줘야한다.

  • finally : exception 발생 여부와 관계없이 꼭 처리해야 하는 로직 기술
    finally가 들어갈 수도 있고 안 들어갈 수도 있다. 꼭 수행해야하는 것들을 넣어준다.
    중간에 return문을 만나도 finally 구문은 실행되지만 System.exit();을 만나면 무조건 프로그램 종료
    주로 java.io나 java.sql 패키지의 메소드 처리 시 이용

throws로 예외 던지기


throw's' => 위임
throw => Exception 강제 발생

메소드나 생성자가 Exception을 발생시킬 수 있다.


try~catch로 예외 잡기


public FileReader(String fileName)
           throws FileNotFoundException

String을 매개변수로 가지는 FileReader라는 생성자가 FileNotFoundException이라는 예외를 발생시킬 수 있다.


public String readLine()
                throws IOException

BufferedReader의 생성자 readLine()이 IOException을 발생시킬 수 있다.


public void close()
           throws IOException

BufferedReader의 메소드 close()가 IOException을 발생시킬 수 있다.

try~with~resource

Exception과 오버라이딩

Class IOException
	java.lang.Object
		java.lang.Throwable
			java.lang.Exception
				java.io.IOException

Direct Known Subclasses: EOFException
end of file

IOException이 처리할 수 있는 범위가 EOFException보다 훨씬 크다.

사용자 정의 예외

※ 사용자 정의 클래스 - 내가 직접 만든 클래스 (Academy, Teacher, Student, Parent, Child 등)
사용자 정의 예외 - 내가 직접 만든 예외
★Exception 클래스를 상속받아★ 예외 클래스를 작성하는 것으로
Exception 발생하는 곳에서 throw new 예외클래스명()으로 발생
※ Object가 모든 클래스의 최상위 클래스라면 Exception은 모든 예외 클래스의 상위 클래스

0개의 댓글