[JAVA] 예외처리

임유빈·2022년 7월 19일
0

JAVA

목록 보기
14/17
post-thumbnail

1. 예외와 예외 클래스

(1) 오류의 종류

  • 에러 (Error)
    하드웨어의 잘못된 동작 또는 고장으로 인한 오류 , 에러가 발생되면 프로그램 종료, 정상 실행 상태로 돌아갈 수 없다.

  • 예외 (Exception)
    사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인한 오휴, 예외가 발생되면 프로그램 종료, 예외 처리 추가하면 정상 실행 상태로 돌아갈 수 있다.

(2) 예외의 종류

  • 일반(컴파일 체크) 예외(Exception)
    예외 처리 코드 없으면 컴파일 오류 발생

  • 실행 예외(RuntimeException)
    예외 처리 코드를 생략하더라도 컴파일이 되는 예외, 경험 따라 예외 처리 코드 작성이 필요하다.

2. 실행 예외(RuntimeException)

  1. NullPointerException : 객체 참조가 없는 상태
  • null 값 갖는 참조변수로 객체 접근 연산자인 도트(.) 사용했을 때 발생
  1. ArrayIndexOutOfBoundsException
  • 배열에서 인덱스 범위 초과하여 사용할 경우 발생

ClassCastException

타입 변환이 되지 않을 경우 발생

3. 예외 처리 코드(try-catch-finally)

(1) 예외 처리 코드

예외 발생시 프로그램 종료를 막고, 정상 실행 유지할 수 있도록 처리해주는 코드

• 일반 예외: 반드시 작성해야 컴파일 가능
• 실행 예외: 컴파일러가 체크해주지 않으며 개발자 경험 의해 작성

4. 예외 종류에 따른 처리 코드

(1) 다중 catch

예외 별로 예외 처리 코드 다르게 구현한다.

  • catch 순서 : 상위 클래스가 위에 위치해야 한다.

(2) 멀티(multi) catch


자바 7부터는 하나의 catch 블록에서 여러 개의 예외 처리가 가능해졌다.
• 동일하게 처리하고 싶은 예외를 | 로 연결

(3) 자동 리소스 닫기 (try-with-resources)

(현재에서의 리소스는 일단 데이터를 읽고 쓰는 객체라고 생각하자)

try-with-resources를 사용하면 예외 발생 여부와 상관없이 사용했던 리소스 객체(각종 입출력 스트림, 서버 소켓, 소켓, 각종 채널)의 close() 메소드를 호출하여 안전하게 리소스를 닫아준다. 그때 리소스를 자동으로 닫아주는 것이 try-with-resources이다.

  • 사용하기 위해서는 java.lang.AutoCloseable 인터페이스 구현하고 있어야 한다.
//상세 코드 생략

//try-with-resources를 사용 안하였을 때

FileInputsStream fis = null;

try {} 
	catch {} 
		finally {
            fis.close();
}

//try-with-resources를 사용 하였을 때

try(FileInputsStream fis = new FileInputsStream("file.txt")) {}

(4) 예외 떠 넘기기 (throws)

  1. 메소드 선언부 끝에 작성
  2. 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠 넘기는 역할

5.사용자 정의 예외와 예외 발생

사용자 정의 예외 클래스 선언 : 자바 표준 API에서 제공하지 않는 예외

애플리케이션 서비스와 관련된 예외
• Ex) 잔고 부족 예외, 계좌 이체 실패 예외, 회원 가입 실패 예외....

(1) 사용자 정의 예외 클래스 선언 방법

(2) 예외 발생 시키기

호출된 곳에서 발생한 예외를 처리하도록 한다.

6. 예외 정보 얻기

(1) getMessage()

getMessage() : 예외 발생시킬 때 생성자 매개값으로 사용한 메시지를 리턴한다. 원인을 세분화하기 위해 예외 코드 포함(예: 데이터베이스 예외 코드)

catch() 절에서 활용

(2) printStackTrace()

예외 발생 코드 추적한 내용을 모두 콘솔에 출력한다. 프로그램 테스트하면서 오류 찾을 때 유용하게 활용한다.

0개의 댓글