ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외 처리(Exception)
    JAVA 2023. 3. 2. 21:20

    예외와 에러

    • 예외 : 사용자의 잘못된 조작이나 혹은 개발자의 잘못된 코디으로 인해 발생한 프로그램 오류
    • 에러 : 하드웨어의 고장으로 인해 프로그램이 실행되지 않는 문제
       - 코딩으로 처리 불가

    • 현실 세계에서 예외는 실체를 가지고 있지 않지만 자바에서는 실체를 가지고 있는 객체로 취급한다.

     


    예외의 종류

    1. 일반 예외(checked exception)
      - 컴파일러가 예외 발생 가능성을 미리 검증

    2. 실행 예외(runtime exception)
      - 실행 시에 예외 발생 확인 가능

     


    예외 처리 방법

    • 예외 처리
      - 예외 발생 시 예외 클래스로 객체를 생성하여 정상 실행을 유지할 수 있도록 처리하는 것
      - 예외 처리를 하지 않은 상태에서 예외가 발생하면 예외 발생 시점에 프로그램이 중단된다.

    • try ~ catch 블럭
      a. finally 블럭 : 예외 발생 유무와 상관없이 실행되는 블럭
      b. 직접 예외 객체 발생 : throw 사용 (throws와 별개의 키워드)
    try {
        예외 발생 예상되는 코드
    catch(예외 객체) {
        예외 발생 시 처리 과정
    finally {
        마지막으로 실행할 코드
    }

     


    예외 종류에 따른 처리

    • catch 문이 여러 개 있더라도 try에서 예외가 발생하면 해당되지 않는 다른 catch 문은 수행하지 않고 넘어간다.
    • 예외 별 catch 문의 순서도 중요하다.
      - 위에는 좀 더 구체적인 예외에 대해 작성하고 아래로 갈수록 포괄적인 예외에 대해 작성하는 것이 좋다.

     


    리소스 자동 닫기

    • 리소스(resource) : 데이터를 제공하는 객체

    • 리소스는 사용 시 열어야(open)하고, 사용이 끝나면 닫아야(close) 한다.
      - close를 하지 않으면 불완전한 상태로 남게 되어 다른 프로그램에서 해당 리소스를 사용하지 못할 수 있다.

    • 리소스 사용 중 예외가 발생하면 프로그램이 중단되므로 close되지 않아 문제가 발생할 수 있다.
      - finally에서 close하면 예외와 상관없이 리소스를 안전하게 닫을 수 있다.

    • try 문의 () 안에 리소스를 여는 코드를 작성하면 자동으로 리소스를 닫아준다.
      - close() 가 없어서 finally에서 명시적으로 close() 하는 것을 선호하는 개발자도 있다.
      - 리소스 클래스에 AutoCloseable 기능이 있기 떄문

    예외 떠넘기기

    • 예외가 발생한 메소드에서 예외를 처리하지 않고, 해당 메소드를 호출한 쪽으로 예외를 던지는 기능.
    • throws 키워드 사용
    리턴타입 메소드명(매개변수, ...) throws 예외클래스1, 예외클래스2, ... {
    }


    • 일반예외에 대해서 예외를 떠넘기면 호출한 쪽에서 예외 처리하라는 경고 메시지가 나타나게 된다.
    • Main 메소드에서도 예외를 떠넘길 수 있다.
      - 이때는 JVM에서 예외를 받고, 콘솔 창에 예외 정보를 출력한다.
      - 사실상 예외 처리를 하지 않은 것과 동일함

     


    사용자 정의 예외

    • 개발자가 사용하려는 예외가 표준 라이브러리에 없을 경우 예외를 정의하여 사용 가능하다.

    • 일반 예외로 정의할 경우 Exception 클래스를 상속, 실행 예외로 정의할 경우 RuntimeException을 상속하는 클래스를 선언한다.
    public class XXXException extends [ Exception | RuntimeException ] {
    public XXXException() {
        // 기본 생성자
    }

     

    public XXXException(String message) {
        super(message) // 예외 메시지를 입력하는 생성자
    }


    • 사용자 정의 예외를 발생시키려면 throw 키워드와 함께 예외 객체를 제공하면 된다.

     

    'JAVA' 카테고리의 다른 글

    컬렉션 자료구조(Collection Data Structure)  (0) 2023.03.02
    Java 표준 라이브러리  (0) 2023.03.02
    싱글톤(Singleton) 패턴  (0) 2023.03.02
    익명 클래스(Anonymous Class)  (0) 2023.03.02
    인터페이스(Interface)  (0) 2023.03.02
Designed by Tistory.