Java 프로그래밍기초 230220 #5 예외처리

김춘복·2023년 2월 20일
0

Java 공부

목록 보기
8/20
post-custom-banner

예외처리

프로그램 오류

에러

  • error : 프로그램코드에 의해서 수습될 수 없는 심각한 오류

  • 컴파일에러 : 컴파일시 발생하는 에러

  • 런타임에러 : 프로그램의 실행시 발생하는 에러

  • 논리적에러 : 실행은 되지만 의도와 다르게 동작하는 것

예외

  • 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 미약한 오류

  • Exception클래스들 : 외부의 영향. 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
    예외처리를 하지 않으면 컴파일조차 되지 않는다.

  • RuntimeException클래스들 : 프로그래머의 실수로 발생하는 예외. 예외처리를 하지 않아도 컴파일은 되지만 비정상적으로 종료된다.

예외처리

  • 예외처리(Exception Handling): 예외의 발생에 대비한 코드를 작성하는 것.

  • 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하기 위해 한다.

try-catch문

try {
	// 예외가 발생할 가능성이 있는 문장들을 넣는다.
} catch (Exception1 e1) {
	// Exception1이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
} catch (ExceptionN eN) {
	// ExceptionN이 발생했을 경우, 이를 처리하기 위한 문장을 적는다.
    ...
}
  • try블럭 내에서 예외가 발생한 경우, 발생한 예외의 종류와 일치하는 단 한개의 catch 블럭만 수행된다. 일치하는 catch 블럭이 없으면 예외는 처리되지 못한다.

  • try블럭 내에서 예외가 발생하지 않은 경우 그대로 빠져나간다.

  • |를 통해 catch (Exception1 e1 | Exception2 e2)처럼 여러 catch블럭을 합칠 수 있다.

  • catch블럭은 ()와 {} 두부분으로 나눠져있는데, ()내에는 처리하고자하는 예외와 같은 타입의 참조변수 하나를 선언해야 한다.
    ArithmeticException : n/0과 같은 산술적인 예외일 때
    Exception : 모든 예외클래스는 Exception클래스의 자손이므로 Exception클래스 타입의 참조변수를 선언하면 어떤 종류의 예외가 발생해도 여기서 처리된다.

메서드에 예외선언

  • try-catch이외에도 메서드의 선언부에 throws를 사용할 수 있다.
void method() throws Exception1, Exception2, ... ExceptionN {
	// 메서드의 내용
}
  • 단, 이경우 자손타입의 예외까지도 발생할 수 있다.

printStackTrace() / getMessage()

  • 예외가 발생했을 때 생성되는 예외클래스의 인스턴스에는 발생한 예외에 대한 정보가 담겨있다.

  • printStackTrace() : 예외발생 당시의 호출스택(Call Stack)에 있었던 메서드의 정보와 예외메세지를 화면에 출력한다.

  • getMassage() : 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을 수 있다.

예외 발생시키기

  • throw를 통해 고의로 예외를 발생시킬 수 있다.
Exception e = new Exception("고의로 발생시켰음");
throw e;
throw new Exception("고의로 발생시켰음"); // 으로 위의 2줄을 한줄로 줄여 쓸 수도 있다.

finally 블럭

  • try-catch-finally순으로 try-catch문의 끝에 선택적으로 덧붙여 사용할 수 있으며,
    예외 발생 여부와 상관없이 실행되어야 할 코드를 포함시킬 목적으로 사용된다.

기타

  • 필요에 따라 프로그래머가 알맞은 예외 클래스를 상속받아 새로운 예외 클래스를 정의해 사용할 수 있다.

  • 예외 되던지기 : 예외를 처리하고 필요한 작업을 행한 후에 throw문을 통해 다시 예외를 발생시킬 수 있다.
    하나의 예외에 대해 예외가 발생한 메서드와 이를 호출한 메서드 양쪽 모두에 처리해줘야 할 작업이 있을 때 사용된다.

  • 한 예외가 다른 예외를 발생시킬 수도 있다. 이때 원인이 되는 예외를 원인예외(cause exception)라 한다.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글