Java 예외처리

앞고기랑 소금·2024년 7월 31일

스파르타 TIL

목록 보기
12/43

12일차

  • 오류(Error) vs 예외(Exception)

    • 오류(Error)는 일반적으로 회복이 불가능한 문제
      • 에러가 발생한 경우 우리는 어떠한 에러로 프로그램이 종료되었는지를 확인하고 대응
    • 예외(Exception)는 일반적으로 회복이 가능한 문제
      • 회복이 가능하다는 전제는 그 예외가 발생할 수 있다는 것을 인지하고, 대응할것
  • 예외 발생try-catch, finally

    • 예외 정의
      예외 클래스를 만들어 예외를 정의

      		class OurBadException extends Exception {
      			public OurBadException() {
      				super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
               	}
      		}
    • throw, throws
      throw
      -메서드 안에서, 실제로 예외 객체를 던질 때 사용하는 예약어
      -실제로 던지는 예외 객체 하나와 같이 써야함
      -일반 메서드의 return 키워드처럼 throw 아래의 구문들은 실행되지 않고, throw문과 함께 메서드가 종료
      throws
      -메서드 이름 뒤에 붙어 이 메서드가 어떠한 예외사항을 던질 수 있는지 알려주는 예약어
      -여러 종류의 예외사항을 적을 수 있음

      class OurClass {
      private final Boolean just = true;
      // 신규 문법 throws!
      	public void thisMethodIsDangerous() throws OurBadException {
      		if (just) {
      		// 신규 문법 throw!
       	    throw new OurBadException();
      		}
      	}
      }
  • 메서드를 선언할 때, 메서드가 위험하다는 것을 미리 예측해야 합니다.
  • 예측이 되어 있다면, 실제로 throw 키워드와 함께 이 메서드가 위험하다고 알려야 합니다.
  • handling
    • try{}
      위험한 메소드를 일단 실행 시키기위해 넣음
    • catch () {}
      -()에 예외 클래스를 받아서 처리할지 정의
      -try{}실행중 발생된 ()정의된 예외클래스가 났을때 실행할 코드를 넣음
      -finally{}에 마지막 반드시 실행될 코드를 넣음
public class StudyException {
    public static void main(String[] args) {
        OurClass ourClass = new OurClass();

        try {
            // 1. 위험한 메소드의 실행을 "시도" 해 봅니다.
            // "시도" 해보는 코드가 들어가는 블럭입니다.
            ourClass.thisMethodIsDangerous();
        } catch (OurBadException e) {
            // 2. 예외가 발생하면, "잡아서" handling 합니다.
            // 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
						// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
						// 예외가 발생한 줄에서 바로 코드 실행을 멈추고
						// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
            System.out.println(e.getMessage());
        } finally {
            // 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
            // 무조건 실행되는 코드가 들어가는 블럭입니다.
            System.out.println("우리는 방금 예외를 handling 했습니다!");
        }

    }
}

0개의 댓글