JAVA Exception:이벤트 예외처리

민석·2024년 3월 8일
post-thumbnail

▶개요: 예기치 못한 상황

프로그램을 작성하다 언뜻 타당하지 않은 경우의 예시를 들어보자

  • 어떠한 정수를 0으로 나누었다.
  • 10개 짜리 배열에 11개의 정수를 담는다.
  • 사람의 나이가 -1 살이다.

개발자가 작성한 프로그램의 실행 중에 예외가 발생하면 이에 대응하는 것을 말한다. 자바는 예외처리를 위해 try-catch-finally문을 사용한다.

▶10을 0 으로 나누는 예외처리

try ~ catch {...} 를 이용한 예외처리

class Test
{
	public static void main(String[] args)
    	try{
        	System.out.println(10/0);//throw new ArithmeticException()
        }
        catch(ArithmeticException e){
        	System.out.println("0으로 나눌수 없습니다.");
            e.printstack
        }       
        ```

▶ 예외를 정의한 클래스

예외가 발생하는 경우의 클래스들을 살펴보자면 위와 같은데
자바가 compile 을 실행하게되면 예외적인 오류들을 Class 로 판별하여 객체를 생성해서 예외상황에 맞는 Exception Class 가 객체를 생성해서 던져진다. 사용자 혹은 프로그램 개발자에게서 예기치 못한 상황을 판별하여 Exception Class 를 던져주었으니 예외클래스를 정의해서 잡아주자
컴파일된 파일은 ArithmeticException() 라는
클래스의 오류를 범하고있으므로
catch(ArithmeticException e){ ... } 로 정의해주면 된다.


▶예외처리 클래스의 상위클래스에 대해 고찰할 필요가있다.

쉽게정리 하자면

예외처리 클래스의 상위클래스가 있고 '상속' 받을 수 있다.
더 넓은 의미의 확장해보자면 에러의 종류는

우리가 컴파일할때
발생할 수 있는 컴파일 오류와 실행 중 발생되는 런타임 오류 두가지이다.

컴파일 오류는 대부분 예외이다 우리가 잡기가 쉽지만, 런타임 오류는 시스템 에러가 대부분이다 잡기가 거의 불가능하다.


▶예외처리 클래스(Exception Class)의 집합

  • 예외클래스들 의 최상위클래스는 Throwable 을 상속받는 error 클래스(Unchecked 워낙심각한 에러라서 try~catch{...}로 해결불가능함) 와 exception 클래스
    Exception 클래스를 상속받는 RunTimeException =unchecked exception OtherExceptions = Checked Exception... '
  • 사실상 개발자 입장에서 예외라는 클래스는 Exception 이 최상 클래스

Checked Exception 은
try ~ catch{...} 로 예외처리를 하지않으면 Complie 조차 되지않는다.

▶예외처리를 받지 않겠다면 넘겨라 'throws'

public static void hi() throws ArithmeticException 

자바컴파일이 실행되면 예외 처리 클래스를 통해
객체로써 던져지기 때문에 받겠다면 catch 를 통해 받아야 할것임은
명백하다 하지만 물론 그건 코드개발자가 다른곳으로 넘겨줄일도 있을것이다 따라서 main 문 이전까지는 잡게해야한다.

try {
@예외의 발생이 예상되는 라인

}
catch(클래스명 클래스변수){
@예외가 발생했다면 실행할 라인
}

try ~ catch{ ... } 구문은 격리된 문장이 아니라 하나의 문장으로 사용해야한다.

> TIP

예외는 어느곳이든 발생할 수있기 때문이라고 해서
모든 구문에 try 를 적용시킨다면 곤란하다.

① 모든 코드를 try 블록으로 감싸면 실제로 예외가 발생했을 때
그 원인을 정확히 파악하기 어렵다

② try 블록 내에서 사용되는 리소스가 메모리 사용량에 큰 영향을 미친다.

③ try 블록 내에서 큰 데이터 구조를 생성하거나, 네트워크 연결을 생성하는 등의 작업을 수행하는 경우에는 유지보수가 어려워진다.


> ▶ 메소드를 오버라이딩시 throws 주의사항

클래스를 상속받는 자식클래스는
부모클래스의 thorws 예외처리클래스 보다
상위클래스의 예외처리 클래스 일수가없다.

class AAA throws (예외처리클래스){ ... }
class AAA extends BBB throws (예외처리클래스) , (예외처리클래스) { ... }
class AAA extends BBB throws throwable { ... }

예를 들어 이런 부류이다.
이와같은 형태는 불가능하며 인터페이스의 구현과도 같이 적용된다.


profile
minseok1234

0개의 댓글